Wpf的mstest Sdk单元测试
我们一般使用MSTest 测试项目,其中在创建单元测试项目的时候会遇到两个选择,就是问我们需不需要 Test Runner 。Test Runner有VSTest和 MSTest两个选项。 以及选择覆盖工具:Microsoft.CodeCoverage。
MSTest.Sdk 是一个 MSBuild Project SDK,可以看作是一个“便利包”,它简化了 MSTest 测试项目的 .csproj 文件配置。不一定要使用他它,因为一般情况下已经默认配置好了。
一个项目文件(.csproj)顶部的 Sdk="..." 声明了该项目的“类型”,它决定了项目如何被编译和处理。
Microsoft.NET.Sdk: 这是标准的 .NET 项目 SDK,用于编译类库、控制台应用等。MSTest.Sdk: 这是一个专门为 MSTest 项目准备的 SDK。
接下来是覆盖工具的讲解。这是一个代码覆盖率 (Code Coverage) 分析工具。它用来衡量您的单元测试在多大程度上执行了您的业务代码,是评估测试完备性的一个重要指标。
接下来是固定例程,也可以叫做测试脚手架,或者测试上下文,它的核心思想是为一组相关的测试准备一个稳定、可重复的“初始状态” (Setup),并在测试结束后清理现场 (Teardown),以确保每个测试都在独立、干净的环境中运行,互不干扰。
MSTest 中的四种核心“脚手架”
它们分为两组,一组针对每个测试方法,另一组针对整个测试类。
第一组: 每次测试都执行
[TestInitialize]- 作用: 在每一个
[TestMethod]运行之前,都会执行一次被此特性标记的方法。 - 比喻: 就像每次考试前,都给你一张全新的、干净的草稿纸。
- 用途: 创建被测对象的新实例、重置变量、准备临时的测试数据等,确保每个测试的起点都是一致的。
- 作用: 在每一个
[TestCleanup]- 作用: 在每一个
[TestMethod]运行之后,都会执行一次。 - 比喻: 考完一门就把那张草稿纸扔掉,不影响下一门考试。
- 用途: 释放
[TestInitialize]中创建的资源、删除临时文件、将数据库恢复到测试前的状态等。
- 作用: 在每一个
第二组: 每个测试类只执行一次
[ClassInitialize]- 作用: 在一个测试类中,所有测试方法开始运行之前,只执行一次。
- 比喻: 就像在新学期开始时,学校为你准备好了整个学期都会用到的教室和桌椅。
- 用途: 用于执行那些开销很大、但只需进行一次的初始化操作,例如建立数据库连接、加载大型配置文件、启动一个模拟服务器等。
- 注意: 此方法必须是
public static,并且必须接受一个TestContext类型的参数。
[ClassCleanup]- 作用: 在一个测试类中,所有测试方法全部运行完毕之后,只执行一次。
- 比喻: 学期结束后,打扫整个教室。
- 用途: 用于释放
[ClassInitialize]中创建的昂贵资源。 - 注意: 此方法必须是
public static。