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

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

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

为了简单测试,我们把 ConsoleApp1 中的 Program.cs 代码简化为。
using System;namespace ConsoleApp1{public class Program{public static void Main(){Console.WriteLine("Hello world");}}}
修改 UnitTestProject1 中的 UnitTest1.cs 文件代码如下。
using Microsoft.VisualStudio.TestTools.UnitTesting;using System;using System.IO;using ConsoleApp1;namespace ConsoleApp1.UnitTestProject1{[TestClass]public class UnitTest1{[TestMethod]public void TestMethod1(){string expected = "hello world";//期望的值using (var sw = new StringWriter()){//设置sw为标准输出Console.SetOut(sw);//运行项目的主函数ConsoleApp1.Program.Main();//sw自动接收main函数中的输出,var result = sw.ToString().Trim();Assert.AreEqual(expected, result);}}}}
代码解释:
定义了一个 string 类型的变量,用于存放我们测试的预期值,最终正确的结果。这里就是测试
Main()方法向控制台写入的是否是此文本内容。实现用于将信息写入字符串的
System.IO.TextWriter。 信息存储在基础StringBuilder中。SetOut()方法用于设置一个新的标准输出。Main()方法是静态方法,直接使用类名.方法名()访问,表示这是一个输出操作,与SetOut()配合。此时
sw对象就是Main()方法执行的结果了,就是输出的文本内容。使用
Assert.AreEqual()比较Main()方法执行的结果与我们指定的expected变量的值是否相等,如果相等,则测试成功,说明Main()方法逻辑没有问题。
现在选择 测试->测试资源管理器,然后在弹出的对话框中选择运行。

测试结果不通过,因为 hello world 不等于 Hello world。
让我们把代码修改一下。
string expected = "Hello world";
再次运行测试结果通过。
