抑制規則會自動抑制不適用於 MSTest 測試環境的其他診斷分析器(如 Roslyn 或 Visual Studio 執行緒分析器)。
此類別的規則
| 規則識別碼 | Title | 抑制 |
|---|---|---|
| MSTEST0027 | 取消測試方法中的非同步後綴。 | VSTHRD200 |
| MSTEST0028 | 測試夾具方法時,請抑制非同步後綴。 | VSTHRD200 |
| MSTEST0033 | 忽略尚未初始化的不可空參考。 | CS8618 |
抑制規則的運作方式
這些規則本身並不產生診斷結果。 相反地,它們會抑制其他分析器發出的警告,否則在測試程式碼中會錯誤觸發。
VSTHRD200:對非同步方法使用 Async 後綴
被抑制於:MSTEST0027、MSTEST0028
為什麼要抑制:Visual Studio 執行緒分析器(VSTHRD200)建議非同步方法應該加上「Async」後綴。 然而,測試方法與測試夾具方法是由 MSTest 透過屬性而非命名慣例來發現的。 在測試方法名稱中加上「非同步」後綴(例如) TestLoginAsync則無意義,且可能使測試名稱更難辨識。
範例:
[TestMethod]
public async Task TestLogin() // VSTHRD200 would warn without suppression
{
await LoginAsync();
// ...
}
CS8618:不可空除的參考未初始化
被壓制者: MSTEST0033
為什麼要忽略:在使用可空參考型別時,編譯器會針對未在建構函式中初始化的非可空屬性發出警告。 不過,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