通过


MSTest 使用规则

使用规则支持正确使用 MSTest 属性、方法和模式。 这些规则捕获常见错误,并确保测试遵循框架的要求和约定。

此类别中的规则

规则编号 Title Severity 修复可用
MSTEST0002 测试类应当有效。 警告 是的
MSTEST0003 测试方法应有效。 警告→错误* 是的
MSTEST0005 TestContext 应有效。 警告 是的
MSTEST0007 在测试方法上使用属性。 警告
MSTEST0008 TestInitialize 应有效。 警告 是的
MSTEST0009 TestCleanup 应是有效的。 警告 是的
MSTEST0010 ClassInitialize 应有效。 警告 是的
MSTEST0011 ClassCleanup 应该是有效的。 警告 是的
MSTEST0012 AssemblyInitialize 应有效。 警告 是的
MSTEST0013 AssemblyCleanup 应该是有效的。 警告 是的
MSTEST0014 DataRow 应有效。 警告 是的
MSTEST0017 断言参数应按正确的顺序传递。 信息 是的
MSTEST0018 DynamicData 应有效。 警告 是的
MSTEST0023 不要否定布尔断言。 信息 是的
MSTEST0024 不要存储静态 TestContext。 警告
MSTEST0026 断言参数应避免条件访问。 信息
MSTEST0030 包含测试方法的类型应为测试类。 警告 是的
MSTEST0031 请勿使用 System.ComponentModel.DescriptionAttribute。 信息 是的
MSTEST0032 查看 always-true 断言条件。 信息
MSTEST0034 请使用 ClassCleanupBehavior.EndOfClass。 信息 是的
MSTEST0035 将 DeploymentItem 与测试方法或测试类配合使用。 信息
MSTEST0037 使用正确的断言方法。 信息 是的
MSTEST0038 避免对值类型使用 Assert.AreSame。 信息 是的
MSTEST0039 使用较新的 Assert.Throws 方法。 信息 是的
MSTEST0040 避免在异步 void 上下文中使用断言。 警告
MSTEST0041 对测试类使用基于条件的属性。 警告
MSTEST0042 重复 DataRow。 警告
MSTEST0043 在测试方法上使用重试属性。 警告→错误* 是的
MSTEST0046 使用 Assert 而不是 StringAssert。 信息 是的
MSTEST0048 TestContext 属性用法。 警告
MSTEST0049 Flow TestContext CancellationToken。 信息 是的
MSTEST0050 全局测试装置应有效。 警告 是的
MSTEST0051 Assert.Throws 应包含单个语句。 信息 是的
MSTEST0052 避免显式 DynamicDataSourceType。 信息 是的
MSTEST0053 避免使用 Assert 语句的格式参数。 信息 是的
MSTEST0054 使用 CancellationToken 属性。 信息 是的
MSTEST0055 不要忽略字符串方法返回值。 警告
MSTEST0056 TestMethodAttribute 应正确设置 DisplayName。 信息 是的
MSTEST0057 TestMethodAttribute 应传播源信息。 警告
MSTEST0058 避免在 catch 块中使用断言。 信息
MSTEST0059 正确使用 Parallelize 属性。 警告
MSTEST0060 重复 TestMethodAttribute。 警告 是的
MSTEST0061 使用 OSCondition 属性而不是运行时检查。 信息 是的
MSTEST0062 避免使用 out/ref 类型的测试方法参数。 警告 是的
MSTEST0063 测试类应具有有效的构造函数。 警告

* 在RecommendedAll模式中升级为“错误”。

常见应用场景

测试结构验证

确保测试类、方法和装置符合 MSTest 要求:

  • MSTEST0002:测试类布局要求(例如公共、非静态)。
  • MSTEST0003:测试方法布局要求(️⚠ 升级到错误)。
  • MSTEST0030:具有 [TestMethod] 的方法必须位于 [TestClass] 中。
  • MSTEST0063:测试类构造函数验证。

生命周期方法

验证初始化和清理方法:

数据驱动的测试

确保正确使用数据属性:

编写更好的断言

正确有效的断言用法规则:

  • MSTEST0017:按正确的顺序传递预期/实际。
  • MSTEST0023:不要否定条件(直接使用 Assert.IsFalse)。
  • MSTEST0026:避免断言中的 null 条件运算符。
  • MSTEST0032:查看始终为 true 的条件。
  • MSTEST0037:使用最合适的断言方法。
  • MSTEST0038:不要将 AreSame 与值类型一起使用。
  • MSTEST0039:使用 Assert.ThrowsExactly (较新的 API)。
  • MSTEST0046:首选 Assert 而不是 StringAssert。
  • MSTEST0051:Assert.Throws 应测试单个语句。
  • MSTEST0053:使用字符串内插而不是格式参数。
  • MSTEST0058:不要将断言置于 catch 块中。

TestContext 用法

TestContext 对象的正确用法:

  • MSTEST0005:TestContext 属性验证。
  • MSTEST0024:不要将 TestContext 存储在静态字段中。
  • MSTEST0048:固定装置中的受限属性访问。
  • MSTEST0049:从 TestContext 中传递取消令牌。
  • MSTEST0054:使用 TestContext.CancellationToken 属性。

异步模式

异步测试代码的规则:

  • MSTEST0040:避免异步 void 方法中的断言。

测试配置

  • MSTEST0031:使用适当的属性(而不是 System.ComponentModel.Description)。
  • MSTEST0035:DeploymentItem 用法。
  • MSTEST0041:条件属性必须位于测试类上。
  • MSTEST0043:重试属性必须在测试方法上(️⚠ 升级到 Error)。
  • MSTEST0055:不要忽略字符串方法返回值。
  • MSTEST0056:在 TestMethodAttribute 上正确设置 DisplayName。
  • MSTEST0057:在自定义 TestMethodAttribute 中传播源信息。
  • MSTEST0059:不要同时使用 Parallelize 和 DoNotParallelize。
  • MSTEST0060:避免重复 TestMethodAttribute。
  • MSTEST0061:使用 OSCondition 属性进行平台检查。