一、概念
一个单元测试是一段自动化的代码,这段代码调用被测试的工作单元,之后对这个单元的单个最终结果的某些假设进行检验。
官方文档: 使用 MSTest 和 .NET 进行 C# 单元测试 - .NET | Microsoft Docs
最佳实践:测试驱动开发(TDD)
二、常见框架
1.MSTest(目前使用)
2.NUnit
3.xUnit
接下来以MSTest举例
三、常见功能
1.常见属性
①.测试类
[TestClass]属性表示包含单元测试的类
②.测试方法
[TestMethod]属性表示单元测试的方法
③.数据输入
[DataRow]属性表示数据输入、可做参数化测试
④.初始化函数
[ClassInitialize]属性表示运行测试类的初始化函数
[ClassCleanup]属性表示运行测试类的销毁函数
[TestInitialize]属性表示运行测试函数的初始化函数
[TestCleanup]属性表示测试函数销毁函数
[AssemblyInitialize]属性表示程序集初始化函数
[AssemblyCleanup]属性表示程序集销毁函数
2.断言(Assert)
IsTrue、IsFalse、IsNull、IsNotNull、AreSame、AreNotSame、AreEqual、AreNotEqual、ThrowsException等
四、项目实践
1.测试资源管理器
位置:视图->测试资源管理器
查看所有编写的测试代码
可单个或多个执行、调试
2.代码覆盖率分析
官方文档:微软官方文档-代码覆盖率分析配置
注意点:visual studio版本必须为企业版(Enterprise),非企业版无代码覆盖率分析功能
①.编写规则
在CodeCoverage标签内编写,Include代表包括资源,Exclude代表排除资源
XML 元素 | 匹配项 |
---|---|
ModulePath | 匹配程序集名称或文件路径指定的程序集。 |
CompanyName | 按“公司”特性匹配程序集。 |
PublicKeyToken | 按公钥标记匹配签名程序集。 |
Source | 按在其中定义元素的源文件的路径名称匹配元素。 |
Attribute | 匹配具有指定特性的元素。 指定属性的完整名称,例如 <Attribute>^System\.Diagnostics\.DebuggerHiddenAttribute$</Attribute> 。 如果排除 CompilerGeneratedAttribute 属性,将从代码覆盖率分析中排除使用语言功能(如 async 、await 、yield return 和自动实现的属性)的代码。 要排除真正生成的代码,只需排除 GeneratedCodeAttribute 属性。 |
Function | 按完全限定的名称匹配过程、函数或方法,包括参数列表。 还可以使用正则表达式来匹配部分名称。 示例: Fabrikam.Math.LocalMath.SquareRoot(double); (C#) Fabrikam::Math::LocalMath::SquareRoot(double) (C++) |
②.绑定自定义规则
点击测试资源管理器右上角齿轮图标,配置运行设置,选择解决方案范围内runsettings文件,绑定我们编写好的规则文件
③.生成代码覆盖率分析文件
右击我们要分析的测试项目,选择分析代码覆盖率,生成.coverage文件(二进制文件、只能使用vs打开)
④.生成可视的html文件
将coverage文件导出,使用ReportGenerator工具(或其他工具也可)生成可视的html文件
命令如下:
reportgenerator "-reports:1.coveragexml" "-targetdir:report"