通过


MSTest 抑制规则

抑制规则会自动禁止来自其他分析器(例如 Roslyn 或 Visual Studio 线程分析器)的诊断,这些分析器不适用于 MSTest 测试的上下文。

此类别中的规则

规则编号 Title 抑制
MSTEST0027 取消测试方法的异步后缀。 VSTHRD200
MSTEST0028 取消测试装置方法的异步后缀。 VSTHRD200
MSTEST0033 禁止未初始化不可为 null 的引用。 CS8618

抑制规则的工作原理

这些规则不会生成自己的诊断。 相反,它们会抑制其他分析器发出的警告,从而避免在测试代码中误触发。

VSTHRD200:对异步方法使用 Async 后缀

禁止显示:MSTEST0027MSTEST0028

为什么禁止显示: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