C# 单元测试教程 Unit test

什么是单元测试

单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。正常来说都是对一个函数方法进行测试,需要测试这个函数的输出跟输入是不是有对应上,异常,边界情况是不是会有处理好。输出除了该函数的返回值,还包括调用了其它的方法的参数,或者有没有存储到数据库等。 在C#当中,如果一个类依赖于具体实现,或者静态类比如说时间。就会让我们的很难写单元测试。通过使用依赖注入可以让我们的单元测试变得容易。 输了单元测试,我们还有集成测试, 在Asp.net API当中通过是对一个 Action进行测试。(会发现如果我们测试这个东西想把所有的路径都覆盖到,哪需要写的测试代码太多了。) 在集成测试上面我们通常还有会E2E测试,会把很多功能串起来测试。(这个通常是QA来完成的)

为什么要使用单元测试

缺点:

  1. 很多时候单元测试都要花费跟开发功能接近的时间。
  2. 验证原型时,架构代码剧烈变动时,单元测试基本全废。

优点:

  1. 用当下的成本来节省未来的成本。减少了潜在的错误。项目越长期的话,越有价值,边际成本越小。
  2. 当我们进行代码维护重构的时候,有单元测试,是可以给我们的质量带来很大保证。
  3. 在团队合作开发过程当中,当成员提交代码(Pull Request)的时候我们可以让CI自动跑单元测试,这样可以避免很多低级的错误,如代码合并错误,把原功能改坏了。
  4. 自己写单元测试的时候也会仔细在思考一下功能。

C#当中我们可以使用的测试框架

  1. Xunit 写Nunit的人,写的, 是用来跑单元测试的框架。
  2. FluentAssertions 用来对测试条件进行断言。
  3. Moq 用来进行对象Mock的。
  4. AutoFixture。

在这个教程中我们主要就是学习上面的三个框架。和如何对一些常见的类进行Mock和断言。 比如DbContext, IConfiguration 和 ILogger

最近更新的
...