net单元测试小试

一、概念

一个单元测试是一段自动化的代码,这段代码调用被测试的工作单元,之后对这个单元的单个最终结果的某些假设进行检验

官方文档: 使用 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 属性,将从代码覆盖率分析中排除使用语言功能(如 asyncawaityield 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"
作者:打伞De鱼
本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/hongxuquan/p/15542827.html