0


C# 软件开发之单元测试

在日常开发中,一般通过启动调试或运行程序来查看功能是否符合预期,如果不符合预期,则需要优化程序,再次运行,如此反复,直到程序的输出符合预期需求为止。随着程序的不断复杂化,某些功能的测试也变得越来越复杂,可能为了验证一个很小的改动项,就需要操作很多步骤,才能验证成功,如果验证不成功,则需要多次重复验证,这对于开发者来说,将大大的拖延了开发进度。如何才能将复杂的功能进行拆分,每一个都可以单独进行验证呢?如果其他的功能没有问题,则只需要验证修改的那部分内容即可,这就是本篇文章需要介绍的单元测试。通过创建和运行单元测试,检查代码是否按预期工作。

什么是单元测试?

单元测试,是指对软件中的最小可测试单元进行检查和验证。至于如何裁定最小可测试单元,则需要根据实际情况进行分析,一般情况下,一个类,一个函数,一个页面,一个按钮事件,都可以作为一个测试单元。总的来说,单元就是人为规定的最小的被测功能模块。对这些模块进行的测试,就称之为单元测试。

单元测试的好处?

通过单元测试,可以尽早的发现程序的BUG,便于后期的开发及调试,维护。可以使得程序更加健壮,我们对自己的代码也更加有信心,也便于问题的排查与定位。

单元测试环境

本示例主要基于以下环境进行单元测试:

  1. 开发工具:Visual Studio 2022
  2. 开发目标平台:.NET 6.0

创建目标项目

首先创建一个控制台应用程序DemoOne,步骤如下所示:

项目模板选择控制台项目,然后进入配置新项目页面,输入项目名称,点击下一步,如下所示:

选择目标框架,.NET 6.0(长期支持),并勾选不使用顶级语句,然后点击创建,如下所示:

创建成功后,如下所示:

创建功能类

我们有如下一个功能类Calculator,实现两个整数的加,减,乘,除,如下所示:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace DemoOne
  7. {
  8. /// <summary>
  9. /// 实现整数的加减乘除
  10. /// </summary>
  11. public class Calculator
  12. {
  13. public int Add(int x, int y)
  14. {
  15. return x + y;
  16. }
  17. public int Sub(int x, int y)
  18. {
  19. return x - y;
  20. }
  21. public int Multiply(int x, int y)
  22. {
  23. return x * y;
  24. }
  25. public int Divide(int x, int y)
  26. {
  27. return x / y;
  28. }
  29. }
  30. }

创建单元测试项目

在解决方案名称上,点击右键菜单,添加新建项目,然后选择NUnit测试项目,然后点击下一步,如下所示:

输入项目名称DemoOne.Test,如下所示:

选择目标测试框架.NET 6.0(长期支持),然后点击创建,如下所示:

创建成功后的项目,如下所示:

添加项目引用并创建测试类

在DemoOne.Test项目中,添加DemoOne项目引用,并创建CalculatorTest测试类,如下所示:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace DemoOne.Test
  7. {
  8. public class CalculatorTest
  9. {
  10. [Test]
  11. public void TestAdd()
  12. {
  13. var calculator=new Calculator();
  14. int a = 10;
  15. int b = 8;
  16. int c = calculator.Add(a, b);
  17. Assert.AreEqual(c, 18);
  18. }
  19. [Test]
  20. public void TestSub()
  21. {
  22. var calculator = new Calculator();
  23. int a = 10;
  24. int b = 8;
  25. int c = calculator.Sub(a, b);
  26. Assert.AreEqual(c, 2);
  27. }
  28. [Test]
  29. public void TestMultipy()
  30. {
  31. var calculator = new Calculator();
  32. int a = 10;
  33. int b = 8;
  34. int c = calculator.Multiply(a, b);
  35. Assert.AreEqual(c, 80);
  36. }
  37. [Test]
  38. public void TestDivide()
  39. {
  40. var calculator = new Calculator();
  41. int a = 10;
  42. int b = 8;
  43. int c = calculator.Divide(a, b);
  44. Assert.AreEqual(c, 1);
  45. }
  46. }
  47. }

注意:其中方法上方添加[Test]表示此方法是一个单元测试方法。

测试资源管理器

在VisualStudio中,单击测试(S),选择测试资源管理器(Ctrl+E,T),打开测试资源管理器窗口,如下所示:

在资源管理器窗口,可看到刚刚创建的4个单元测试,且处于未运行状态。点击测试资源管理器中的运行按钮,即可运行单元测试,如下所示:

运行成功后,可以看到单元测试的运行结果。如下所示:

单元测试异常输出

通过修改单元测试中除法的代码,如下所示:

  1. [Test]
  2. public void TestDivide()
  3. {
  4. var calculator = new Calculator();
  5. int a = 10;
  6. int b = 0;
  7. int c = calculator.Divide(a, b);
  8. Assert.AreEqual(c, 0);
  9. }

在上述代码中,被除数为0,会抛出异常,再次运行单元测试,则会运行不通过,并提示错误信息,如下所示:

经过单元测试后,发现被除数为0时抛出异常,则需要优化代码,经过优化后的代码,如下所示:

  1. public int Divide(int x, int y)
  2. {
  3. if (y == 0)
  4. {
  5. return 0;
  6. }
  7. else
  8. {
  9. return x / y;
  10. }
  11. }

优化成功后,再次运行单元测试,如下所示:

以上示例,也从另外一个方面说明了,通过单元测试,可以使我们的程序,更加健壮。

Assert断言

在上述代码示例中,使用到了Assert.AreEqual方法,判断两个数是否相等。常用的有:

  1. Assert.IsTrue 判断是否为真
  2. Assert.IsFalse 判断是否为假
  3. Assert.AreEqual 判断是否相等。

Assert还有很多方法,本文不再一一列举,具体可参考:

https://learn.microsoft.com/zh-cn/dotnet/api/microsoft.visualstudio.testtools.unittesting.assert?view=visualstudiosdk-2022

以上就是C#软件开发之单元测试的全部内容。希望可以抛砖引玉,一起学习,共同进步。

标签: c# 单元测试 log4j

本文转载自: https://blog.csdn.net/fengershishe/article/details/133692240
版权归原作者 公子小六 所有, 如有侵权,请联系我们删除。

“C# 软件开发之单元测试”的评论:

还没有评论