zoukankan      html  css  js  c++  java
  • 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鱼
    本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    教你OpenCV3.2.0+VS2017开发环境配置
    使用conda 与pip命令管理Python库
    【Python+OpenCV】Windows+Python3.6.0(Anaconda3)+OpenCV3.2.0安装配置
    GitHub Toturial
    C 语言多线程与锁机制
    翻译 | Placing Search in Context The Concept Revisited
    翻译 | Improving Distributional Similarity with Lessons Learned from Word Embeddings
    Derivative of Softmax Loss Function
    从头推导与实现 BP 网络
    施密特正交化 GramSchmidt
  • 原文地址:https://www.cnblogs.com/hongxuquan/p/15542827.html
Copyright © 2011-2022 走看看