抑制规则会自动禁止来自其他分析器(例如 Roslyn 或 Visual Studio 线程分析器)的诊断,这些分析器不适用于 MSTest 测试的上下文。
此类别中的规则
| 规则编号 | Title | 抑制 |
|---|---|---|
| MSTEST0027 | 取消测试方法的异步后缀。 | VSTHRD200 |
| MSTEST0028 | 取消测试装置方法的异步后缀。 | VSTHRD200 |
| MSTEST0033 | 禁止未初始化不可为 null 的引用。 | CS8618 |
抑制规则的工作原理
这些规则不会生成自己的诊断。 相反,它们会抑制其他分析器发出的警告,从而避免在测试代码中误触发。
VSTHRD200:对异步方法使用 Async 后缀
禁止显示:MSTEST0027、MSTEST0028
为什么禁止显示:Visual Studio 线程分析器(VSTHRD200)建议异步方法应具有“Async”后缀。 但是,MSTest 通过属性(而不是命名约定)发现测试方法和测试装置方法。 将“Async”后缀添加到测试方法名称(例如 TestLoginAsync)没有任何价值,并且可能会使测试名称不易阅读。
示例:
[TestMethod]
public async Task TestLogin() // VSTHRD200 would warn without suppression
{
await LoginAsync();
// ...
}
CS8618:未初始化不能为 null 的引用
禁止显示: MSTEST0033
为什么禁止显示:使用可以为 null 的引用类型时,编译器会警告构造函数中未初始化的不可为 null 的属性。 但是,MSTest 会在运行任何测试方法之前自动初始化 TestContext 属性,因此该警告不适用。
示例:
[TestClass]
public class MyTests
{
public TestContext TestContext { get; set; } = null!; // CS8618 would warn without suppression
[TestMethod]
public void TestSomething()
{
// TestContext is guaranteed to be non-null here
TestContext.WriteLine("Test output");
}
}
禁用抑制规则
如果想要看到这些警告,请在以下项 .editorconfig中禁用抑制规则:
[*.cs]
dotnet_diagnostic.MSTEST0027.severity = none
dotnet_diagnostic.MSTEST0028.severity = none
dotnet_diagnostic.MSTEST0033.severity = none