首页
学习
活动
专区
圈层
工具
发布

.NET单元测试的艺术-2.核心技术

开篇:上一篇我们学习基本的单元测试基础知识和入门实例。但是,如果我们要测试的方法依赖于一个外部资源,如文件系统、数据库、Web服务或者其他难以控制的东西,那又该如何编写测试呢?...这一篇中我们会开始接触这些核心技术,借助存根破除依赖,使用模拟对象进行交互测试,使用隔离框架支持适应未来和可用性的功能。 一、破除依赖-存根 1.1 为何使用存根?   ...它的设计目标是提供一个优秀的测试替代的.NET模拟框架。它是一个模拟测试框架,用最简洁的语法,使得我们能够把更多的注意力放在测试工作,减轻我们的测试配置工作,以满足我们的测试需求,帮助完成测试工作。...四、小结   本篇我们学习了单元测试的核心技术:存根、模拟对象以及隔离框架。使用存根可以帮助我们破除依赖,模拟对象与存根的区别主要在于存根不会导致测试失败,而模拟对象则可以。...(1)Roy Osherove 著,金迎 译,《单元测试的艺术(第2版)》   (2)匠心十年,《NSubsititue完全手册》   (3)张善友,《单元测试模拟框架:NSubstitute》 作者:

2.2K20

.NET重构—单元测试的代码重构

阅读目录: 1.开篇介绍 2.单元测试、测试用例代码重复问题(大量使用重复的Mock对象及测试数据) 2.1.单元测试的继承体系(利用超类来减少Mock对象的使用) 2.1.1.公用的MOCK对象;...,重构能有今天的风光影响力完全少不了单元测试的功劳;最近一段时间写单元测试用例的时间远超过我写逻辑代码的时间和多的多的代码量,这是为什么?...;所以我们会尽可能的多去写用例来达到最终的理想效果; (总之把单元测试的所有精力集中在可能会出问题的地方,也是自己最担心的地方,这个地方通常是逻辑比较复杂的地方;) 2】单元测试、测试用例代码重复问题(...;Order实体是一个比较简单的对象,属性也就只有两个,但是真实环境中不会这么简单,会有几十个字段都需要进行测试验证,再加上N多个用例,会使相同的代码变的很多; 那么我们同样需要将这部分的代码提取出来放到基类中去...;其实从特定领域开发框架,特定领域架构我们能简单的体会到一丝意思,面向特定领域单元测试框架是在单元测试框架的基础之上进行二次领域相关的封装;比如:如何很好的将领域规则独立起来,如果在单元测试中使用这些独立起来的领域规则

1.6K60
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    ASP.NET Web API路由系统:路由系统的几个核心类型

    虽然ASP.NET Web API框架采用与ASP.NET MVC框架类似的管道式设计,但是ASP.NET Web API管道的核心部分(定义在程序集System.Web.Http.dll中)已经移除了对...也就是说,ASP.NET Web API核心框架的URL路由系统与ASP.NET本身的路由系统是相对独立的。...但是当我们采用基于Web Host的方式(定义在程序集System.Web.Http.WebHost.dll)将ASP.NET Web API承载于一个ASP.NET Web应用的时候,真正实现URL路由的依然是...另一个同样通过字典类型表示的只读属性DataTokens,我们应该不会感到陌生,至于通过制度属性Handler返回的HttpMessageHandler对象是组成ASP.NET Web API消息处理管道的核心...Web API管道的HttpConfiguration对象,这依赖于我们对Web API的寄宿方式,这并没有定义在ASP.NET Web API的核心框架之中。

    10.5K110

    WEB的核心:HTTP协议

    概念 HTTP全称“超文本传输协议”,是一个应用层协议,对Web的请求应答格式进行了规定。HTTP由两个程序实现,一个客户端程序,一个服务端程序。...使用GET进行请求时,实体为空(当然技术上也可以做到不为空,这是一个规范问题),常见的表单提交使用POST,实体中存放的是用户表单字段的输入值。...Cookie技术有四个组件:①请求报文中的Cookie首部行。②响应报文中的Cookie首部行。③客户浏览器保存一个Cookie文件。④Web站点的Cookie标识生成组件。 ?...网站A写下的cookie存在于A的域下,但网站A也可以写下B域的cookie,这种cookie称为第三方cookie,一般是通过调用第三方的SDK来写下的。...出于对用户隐私的保护,各大浏览器开始慢慢的禁用三方Cookie,但商业的力量总是一往无前的,使用第一方Cookie代替三方Cookie等新的方式也在慢慢的出现。 版本演进 ?

    87210

    .NET单元测试的艺术-1.入门

    一、单元测试基础 1.1 什么是单元测试   一个单元测试是一段自动化的代码,这段代码调用被测试的工作单元,之后对这个单元的单个最终结果的某些假设进行检验。   单元测试几乎都是用单元测试框架编写的。...单元测试容易编写,能够快速运行。单元测试可靠、可读,并且可维护。   只要产品代码不发生变化,单元测试的结果是稳定的。 1.2 与集成测试的区别 ?...作为一名.NET程序员,如何在VS中安装NUnit并能够在VS中直接运行测试呢?   Step1.在NuGet中找到NUnit并安装 ?   ...目前为止,我们的单元测试都还很简单也还比较顺利。但是,如果我们要测试的方法依赖于一个外部资源,如文件系统、数据库、Web服务或者其他难以控制的东西,那又该如何编写测试呢?...为了解决这些问题,我们需要创建测试存根、伪对象及模拟对象,下一篇核心技术将会介绍这些内容,让我们跟随Roy Osherove的《单元测试的艺术》一起去探寻吧。 参考资料  ?

    2.6K20

    .NET单元测试的艺术-3.测试代码

    开篇:上一篇我们学习单元测试和核心技术:存根、模拟对象和隔离框架,它们是我们进行高质量单元测试的技术基础。本篇会集中在管理和组织单元测试的技术,以及如何确保在真实项目中进行高质量的单元测试。...当然,在.NET中我们也可以通过泛型来实现此模式,例如下面的代码: public abstract class GenericParserTests where T : IStringParser...你应该在分开的、独立的单元测试中验证多余的关注点,这样才能发现真正失败的地方。   ...(4)把单元测试和集成测试分开   掐面讨论了测试的绿色安全区,我们需要的就是准备一个单独的单元测试项目,项目中仅包含那些在内存中运行,结果稳定,可重复执行的测试。   ...如果没有回失败的测试,可能就不会发现这些错误。 2.2 编写可维护性的测试   可维护性是大多数开发者在编写单元测试时面对的核心问题之一。

    72330

    Maven管理的Spring Web项目集成JUnit单元测试

    JUnit是一套优秀的单元测试框架,而Maven是优秀的Java项目构建和管理工具,两者结合可以很方便地对项目进行自动化测试。   ...该写法适用于没有直接放在classpath下的一些web相关的配置文件,例如本例展示的就是放在常见的WEB-INF目录下的一个文件。   ...的”信¥息”, “20131023102122”,”20131025102122”) ); } }   最后执行“RunAs -> JUnit Test”即可开始JUnit单元测试了,使用Maven...对于Java Web项目,某些业务类可能会带有使用ServletContext等Web容器相关类的代码,对于这些类我们就不能直接用JUnit来测试了,因为默认JUnit是没有Web容器的,我们通常需要借助其它相关的辅助类或者模拟...原文地址:http://www.blogjava.net/qileilove/archive/2013/10/31/405835.html

    84930

    农行 DevOps 进行时之最佳实践分享:实现 .net web 单元测试代码覆盖率统计

    IIS部署.net下web开发项目的单元测试、接口测代码覆盖率数据采集和基于 RunTime 的单元测试代码覆盖率收集。...一、依赖IIS部署.net下web开发项目的单元测试、接口测代码覆盖率数据采集 VisualStudio2015企业版中提供了单元测试及代码覆盖率收集工具。...开发人员在安装有 VisualStudio2015企业版的开发机器上运行单元测试的时候,可以很方便地分析单元测试的代码覆盖率的情况,不需要进行特殊的配置。...但运行在 IIS 中的 ASP.NET 下 Web 应用程序,在程序运行期间去收集代码覆盖率的时候,需要 TFS 生成流水线中使用命令行工具做单独的配置。...二、基于RunTime的单元测试代码覆盖率收集 个人网银系统使用自研的 .net 框架 EBF 进行开发,EBF 框架采用模板和配置的思想,将交易分为 Action-Operation-OpStep 三层

    1.6K10

    用命令行执行 .NET 单元测试时,如何仅执行符合某些条件的单元测试

    本文介绍使用 dotnet test 命令进行单元测试的时候,过滤出被测项目中的一部分测试出来,仅测试这一部分。...---- 背景 建一个 .NET Core 的单元测试项目,例如项目名字是 Walterlv.Demo.Tests。...\Walterlv.Demo.Tests.dll 有时为了调试方便或输出分类数据等,要求执行一部分单元测试,这就需要过滤了。dotnet test 的过滤使用 --filter 选项。...过滤 方法名 查找方法名包含某字符串的单元测试并执行: dotnet test --filter TestMethod1 或者: dotnet test --filter Name~TestMethod1...分类与优先级 查找标记了 [TestCategory("CategoryA")] 的方法并执行单元测试: dotnet test --filter TestCategory=CategoryA 查找标记了

    2.6K20

    WebAssembly核心编程:wasm模块实例化的N种方式

    当我们在一个Web应用中使用WebAssembly,最终的目的要么是执行wasm模块的入口程序(通过start指令指定的函数),要么是调用其导出的函数,这一切的前提需要创建一个通过WebAssembly.Instance...一、wasm模块实例化总体流程 虽然编程模式多种多样,但是wasm模块的实例化总体采用如下的流程: 步骤一:下载wasm模块文件; 步骤二:解析文件并创建通过WebAssembly.Module类型表示的...我们从模块实例中提取并执行导出的absolute函数。导入的print函数会将绝对值计算表达式以如下的形式输出到页面中。...属性返回的正是我们需要的wasm模块实例。...上面的三种激活wasm模块实例的方式可以采用如下的形式来实现。

    58910

    .NET 3.5 中 HttpWebRequest 的核心用法及应用

    在.NET 3.5环境下,HttpWebRequest 类是处理HTTP请求的一个核心组件,它封装了HTTP协议的细节,使得开发者可以方便地发送HTTP请求并接收响应。...本文将详细介绍HttpWebRequest的核心用法及其实战应用。一、HttpWebRequest 的核心用法1....以下是HttpWebRequest的常见应用场景:1. 与Web服务器进行数据交互提交表单数据:在Web应用程序中,经常需要向服务器提交表单数据,如用户注册、登录、搜索查询等。...调用Web API:随着RESTful API的普及,HttpWebRequest被广泛应用于调用Web服务接口,实现客户端与服务器之间的数据交换。2....无论是与Web服务器进行数据交互、数据采集与爬虫、文件上传与下载、身份验证与授权,还是跨域请求和高级配置与自定义请求,HttpWebRequest都能提供灵活且强大的支持。

    1.8K21

    .NET开发的Minimal Web Api交互模块

    今天给大家推荐一个.NET开发的REPR(Request-Endpoint-Response)轮子Biwen.QuickApi。...Biwen.QuickApi提供一种简单集成的Minimal Web Api交互模块 遵循了 REPR 设计。...特性 开箱即用的Api路由 和 权限,Bind,validator体验 该库是NET WebApi/Minimal Api的补充,性能≈MinimalApi,遥遥领先于MVC和WebApi,但是提供了最简单的的使用体验...描述 你可以重写QuickApi的HandlerBuilder方法,以便于你自定义的OpenApi描述 我们强烈建议您使用Refit风格直接撸接口,以便于您的客户端和服务端保持一致的接口定义 因为遵循REPR...风格,所以不推荐SwaggerUI或使用SwaggerStudio生成代理代码,除非您的QuickApi定义的相当规范(如存在自定义绑定,别名绑定等)!

    46630

    .NET 5 Web API 中JWT详细教程:保护你的Web应用

    第一部分: 理解JWT JSON Web Token(JWT)是一种在不同系统之间传递信息的安全方式。它由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。...头部包含加密算法和令牌类型等信息,载荷包含用户的信息,签名用于验证令牌的真实性。 安装必要的包 在开始之前,我们需要在你的项目中添加一些必要的NuGet包来支持JWT。...保护API 现在,你的API已经可以生成JWT令牌了。为了保护你的API,你需要在需要验证用户身份的地方加上[Authorize]特性。...通过这篇简单的教程,你已经了解了如何在.NET 5 Web API中使用JWT来保护你的Web应用。JWT是一种灵活且安全的认证方式,它可以帮助你验证用户身份并保护你的API免受未授权访问。...希望这个教程对你有所帮助,祝你在.NET Core Web开发中取得更多的成功!

    1.1K10
    领券