1. 在 VS 中创建单元测试
1.1 步骤
vs 中,“右键” -> “创建单元测试”,然后按照默认的选项,直接点确定,便生成一个对应的 project。
这个 project 无论是命名控件还是类名,都充斥着<测试类>的气息。
1.2 值得一提的是
1)被测试的类必须为 public,这样测试类才能引用;同理,需要被测试的方法也要 public,如果不是 public,测试时先改成 public;
2)如果是在类里面,并且在方法外面,点的右键来创建单元测试,会自动生成类里面所有关键字为 public 的测试方法;
3)如果是在方法中右键,只生成该方法的测试方法。
2. 编写单元测试
2.1 步骤
1)编写测试代码,测试代码的功能就是去调用被测试的类的方法;
2)编写期望测试代码返回的结果;
3)比较测试代码返回的结果与我们人工编写的期望的结果,是否一致,一致则表示测试通过。
2.2 代码举例
namespace RentalMoive.Tests
{
[TestClass()]
public class CustomerTests
{
[TestMethod()]
public void statementTest()
{
// 期望的结果
string expected = "Rental Record for mao\n\tregular\t3.5\n\trelease\t15\n\tchildren\t4.5\nAmount owed is 23\nYou earned 4 frequent renter points";
// 测试代码
Customer ct = new Customer("mao");
ct.addRental(new Rental(new Movie("regular", Movie.REGULAR), 3));
ct.addRental(new Rental(new Movie("release", Movie.NEW_RELEASE), 5));
ct.addRental(new Rental(new Movie("children", Movie.CHILDRENS), 5));
// 运行测试代码返回的结果
string actual = ct.statement();
// 比较测试的代码的结果是否与期望的结果一致
Assert.AreEqual(expected, actual);
}
}
}
3. 单元测试的作用
1)单元测试是重构的第一步,重构就可能犯错,而单元测试,可以让我们在出错时及时发现及时回头;
2)在重构之前,我们创建单元测试,编写:期望结果、测试代码、比较测试代码的结果和期望的结果,然后运行测试,测试通过则表示我们编写的没有问题,如果测试不通过会打印测试的结果和期望的结果;
3)注意代码覆盖率
例如:一个方法存在 switch 或 if/else 语句,你不能只测其中的一个分支,应该将所有分支都能运行到,这样才能最大可能避免 bug 被藏起来。
只有 Enterprise 版的 vs 有"分析代码覆盖率"的功能,community 和 Professional 没有。
.
查询覆盖率步骤:
a. 点击菜单 “测试”->“分析代码覆盖率”->“所有测试”;
b. VS 将会展示各个命名控件、类、方法的覆盖率统计;
c. 双击"未覆盖块"大于 0 的文件节点,代码窗口会定位到该文件;
d. 代码会有突出显示效果。有三种颜色各自代表:覆盖率(涉及、部分涉及、未涉及)区域,具体哪三种颜色,可点击菜单"工具"->“选项”->“字体颜色”,在右侧"显示项"查看
4)开始重构,我们每做一些修改,就应该跑一遍<运行测试>,频率尽可能的多一些,保证我们步子迈得不会太大,如果测试结果不一致,说明我们的修改存在问题,需要及时找出原因。
内容将同步到微信公众号:广州 WPF 开发