.NET Core 创建单元测试项目

在本章中,我们将讨论如何使用 .NET Core 创建测试项目。单元测试是一个软件的开发过程,该软件具有应用程序中最小的可测试部分,称为单元。他们被单独和独立地检查是否有任何正确的操作。单元测试可以是自动化的,也可以是手动的。

现在打开 新建项目 对话框并选择 MSTest 测试项目(.NET Core) 模板。

注意:在 Visual Studio 2019 版本 16.9 中,MSTest 项目模板 就是单元测试项目。

将其命名为 "UnitTestProject1",创建项目。

然后在该项目下右键点击依赖项,选择项目引用,再选择 ConsoleApp1,进行引用。

为了简单测试,我们把 ConsoleApp1 中的 Program.cs 代码简化为。

  1. using System;
  2. namespace ConsoleApp1
  3. {
  4. public class Program
  5. {
  6. public static void Main()
  7. {
  8. Console.WriteLine("Hello world");
  9. }
  10. }
  11. }

修改 UnitTestProject1 中的 UnitTest1.cs 文件代码如下。

  1. using Microsoft.VisualStudio.TestTools.UnitTesting;
  2. using System;
  3. using System.IO;
  4. using ConsoleApp1;
  5. namespace ConsoleApp1.UnitTestProject1
  6. {
  7. [TestClass]
  8. public class UnitTest1
  9. {
  10. [TestMethod]
  11. public void TestMethod1()
  12. {
  13. string expected = "hello world";
  14. //期望的值
  15. using (var sw = new StringWriter())
  16. {
  17. //设置sw为标准输出
  18. Console.SetOut(sw);
  19. //运行项目的主函数
  20. ConsoleApp1.Program.Main();
  21. //sw自动接收main函数中的输出,
  22. var result = sw.ToString().Trim();
  23. Assert.AreEqual(expected, result);
  24. }
  25. }
  26. }
  27. }

代码解释:

  • 定义了一个 string 类型的变量,用于存放我们测试的预期值,最终正确的结果。这里就是测试 Main() 方法向控制台写入的是否是此文本内容。

  • 实现用于将信息写入字符串的 System.IO.TextWriter。 信息存储在基础 StringBuilder 中。

  • SetOut() 方法用于设置一个新的标准输出。

  • Main() 方法是静态方法,直接使用类名.方法名()访问,表示这是一个输出操作,与SetOut()配合。

  • 此时 sw 对象就是 Main() 方法执行的结果了,就是输出的文本内容。

  • 使用 Assert.AreEqual() 比较 Main() 方法执行的结果与我们指定的 expected 变量的值是否相等,如果相等,则测试成功,说明 Main() 方法逻辑没有问题。

现在选择 测试->测试资源管理器,然后在弹出的对话框中选择运行。

测试结果不通过,因为 hello world 不等于 Hello world。

让我们把代码修改一下。

  1. string expected = "Hello world";

再次运行测试结果通过。