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。