.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";
再次运行测试结果通过。