新建一个控制项目Test
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Yidosoft.Edu.Csharp.UnitTest
{
public class Program
{
//string[] args
public static void Main()
{
Console.WriteLine("hello world");
}
public string getData(string name)
{
return $"我的名字叫{name}";
}
}
}
新建一个单元测试项目
自动生成文件如下:
using System;
using System.IO;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace Yidosoft.Edu.Csharp.UnitTest.Test
{
[TestClass]
public class UnitTest1
{
/*
(1). 定义了一个string类型的变量,用于存放我们测试的预期值,最终正确的结果。这里就是测试Main()方法向控制台写入的是否是此文本内容。
(2). 实现用于将信息写入字符串的 System.IO.TextWriter。 信息存储在基础StringBuilder 中。
(3). SetOut()方法用于设置一个新的标准输出。
(4). Main()方法是静态方法,直接使用类名.方法名()访问,表示这是一个输出操作,与SetOut()配合。
(5). 此时sw对象就是Main()方法执行的结果了,就是输出的文本内容。
(6). 使用Assert.AreEqual()比较Main()方法执行的结果与我们指定的expected变量的值是否相等,如果相等,则测试成功,说明Main()方法逻辑没有问题。
*/
[TestMethod]
public void TestMethod1()
{
string expected = "hello world*";
//期望的值
using (var sw=new StringWriter())
{
//设置sw为标准输出
Console.SetOut(sw);
//运行项目的主函数
UnitTest.Program.Main();
//sw自动接收main函数中的输出,
var result = sw.ToString().Trim();
Assert.AreEqual(expected,result);
}
}
[TestMethod]
public void TestMethod2()
{
string name = "小强";
string expected = $"我的名字叫{name}"; ;
//有返回值,不用sw接收一个Console.WriteLine输出内容
//using (var sw = new StringWriter())
//{
//设置sw为标准输出
//Console.SetOut(sw);
//运行项目的主函数
//UnitTest.Program.Main();
//sw自动接收main函数中的输出,
//var result = sw.ToString().Trim();
UnitTest.Program program = new Program();
//直接拿到相关对象,调用方法
var result = program.getData(name);
Assert.AreEqual(expected, result);
//}
}
}
}
执行测试