【C#】单元测试入门(XUnit 测试框架)

 本文示例环境

  • Visual Studio 2019
  • XUnit 2.9.2 单元测试框架
  • xunit.runner.visualstudio 2.2.0 测试运行工具

为什么要写单元测试

 一个项目中,可能比较庞大。所以,使用测试,可以减少耦合,提升代码的质量。也可以让后续开发人员,快速了解代码。

至于不写测试代码的原因有很多:比如,没必要;懒;不会。我属于不会的。

新写一个功能,重启一个项目,或者另外用main方法调用测试代码,很奇怪,测试起来效率低下。所以,简单入个门,把不会变为会。

框架选型

至于框架的选型。其实本人并不了解也没写过单元测试,这算是第一次真正接触吧。在不了解的情况下怎么选型呢?那就是看哪个最火、用的人多就选哪个。起码出了问题也容易同别人交流。

这里使用了XUnit 。

目标

发现,测试的概念有很多。现在,我需要实现的目标:1. 判断结果是不是自己想要的。2。将需要的结果输出。

开始前准备

  • 新建一个空项目 UnitTestingDemo
  • 新建类库 TestDemo (用于编写被测试的类)
  • 新建类库 TestDemo.Tests (用于编写单元测试)
  • 对类库 TestDemo.Tests 用nuget 安装XUnit 、xunit.runner.visualstudio 。
  • 添加 TestDemo.Tests 对 TestDemo 的引用

简单断言测试

新建一个方法。两个数相加的方法。

1 public class Arithmetic
2 {
3     public int Add(int nb1, int nb2)
4     {
5         return nb1 + nb2;
6     }
7 }

测试代码如下:

 1 public class Arithmetic_Tests
 2 {
 3     [Fact]//需要在测试方法加上特性Fact
 4     public void Add_Ok()
 5     {
 6         Arithmetic arithmetic = new Arithmetic();
 7         var sum = arithmetic.Add(1, 2);
 8         
 9         Assert.True(sum == 3);//断言验证
10     }
11 }

测试之前,可以开启Live Unit Test)。我们可以启用它进行实时的测试。也就是我们编辑单元测试,然后保存的时候,它会自动生成自动测试,最后得出结果。(我在工具那里没找到。暂时不影响后续继续使用)

 点击待测试的项目,或者按【Crlt+R】+ 【Crlt+T】运行。

 运行后,可以看到绿色的狗,表示通过。

带输出的测试

上述代码,我们只能知道,结果是否正确。比如,你断言1+2的结果为3。如果运行错误,(比如结果为2),你只知道错了,但不知道错的结果是什么(当然,你可以加断点看),如果能直接将运行结果输出,是否更好? Console.WriteLine(sum); 没有报错,但没有输出。

于是,我们重构测试方法。

1 private readonly ITestOutputHelper _output;
2 
3 public ArithmeticTest(ITestOutputHelper output)
4 {
5     _output = output;
6 }

修改测试代码为:

1 [Fact]
2 public void Add_Ok()
3 {
4     Arithmetic arithmetic = new Arithmetic();
5    var sum = arithmetic.Add(2,2);
6     _output.WriteLine(sum.ToString()); // 输出将会被捕获并显示在测试结果中
7     Assert.True(sum == 4);
8 }

这样,返回结果中就有输出了。

 

 带参数的测试

注意到测试代码中的参数和结果都写死了。如果我们要对多种情况进行测试,岂不是需要写多个单元测试方法或者进行多次方法执行和断言。这也太麻烦了。在XUnit框架中为我们提供了Theory特性。使用如下:

 1 [Theory]
 2 [InlineData(2, 3, 5)]
 3 [InlineData(2, 4, 6)]
 4 [InlineData(2, 1, 3)] //对应测试方法的形参
 5 public void Add_Ok_Two(int nb1, int nb2, int result)
 6 {
 7     Arithmetic arithmetic = new Arithmetic();
 8     var sum = arithmetic.Add(nb1, nb2);
 9     Assert.True(sum == result);
10 }

参考地址

https://zhuanlan.zhihu.com/p/517412127

posted @ 2024-10-17 14:27  陆陆无为而治者  阅读(47)  评论(0编辑  收藏  举报