共用方式為


MSTest 程式碼分析

MSTest 分析 (“MSTESTxxxx”) 規則會檢查您的 C# 或 Visual Basic 程式代碼是否有安全性、效能、設計和其他問題。

提示

如果您使用 Visual Studio,許多分析工具規則都有相關聯的 代碼修正,您可以套用以更正問題。 程式碼修正會顯示在燈泡圖示功能表中。

規則會組織成類別,例如效能使用方式...

從 MSTest.TestFramework 3.7 開始,MSTest.Analyzers NuGet 套件是架構的相依性。 針對舊版,您必須使用 MSTest 中繼套件,或明確新增 MSTest.Analyzers 的套件參考。

MSTestAnalysisMode

從 MSTest 3.8 開始,可以使用名為 MSTestAnalysisMode 的 MSBuild 屬性來確定哪些分析器在不同的嚴重性級別下被啟用。

提示

若要查看哪個模式下啟用了哪些規則及其嚴重性,您可以瀏覽至 NuGet 快取中您感興趣的版本套件,找出 globalconfigs 目錄,然後開啟對應於分析模式的 .globalconfig 檔案。 如需尋找 NuGet 快取目錄的詳細資訊,請參閱 管理全域套件、快取和暫存資料夾。 從該目錄中,找出 mstest.analyzers 目錄,然後找到 版本 (3.8 和更新版本),然後 globalconfigs。 或者,您可以從 nuget.org 下載您所感興趣的 NuGet 套件,並在 NuGet 套件總管(Windows 應用程式)中檢視,或者直接在 NuGet 套件總管的 Web 應用程式版本中檢視。

此屬性的可用值:

None

此值會將所有分析器設定為 none 嚴重性,並停用所有分析器。 然後,您可以使用 .editorconfig.globalconfig 檔案來啟用個別分析器。

Default

此設定會遵循每個規則的預設記載行為。

  • 默認啟用的規則會使用其預設嚴重性。
  • 默認停用的規則會使用 none 嚴重性。

備註

預設以警告形式啟用的規則,是預期會在執行時引發問題的違規行為。

這是大部分開發人員預期使用的模式。 預設以 Info【suggestion】嚴重性啟用的規則會被提升為警告。 下列規則會在RecommendedAll模式中被升級為錯誤:

All

此模式比 Recommended更咄咄逼人。 所有規則都會啟用為警告。 此外,下列規則會提升為錯誤:

各類別規則

分析儀規則分為以下類別:

設計規則

設計規則 可協助您建立和維護符合適當設計和良好作法的測試套件。

效能規則

效能規則 支援高效能測試。

抑制規則

隱藏規則 支持隱藏來自其他規則的診斷。

使用規則

使用規則 支援 MSTest 的適當使用方式。

按概念分類的規則

尋找依常見測試情境與概念組織的規則:

測試結構與屬性

有助於確保你的測試類別與方法被正確結構化和標註的規則:

相關文件:使用 MSTest 撰寫測試,屬性

非同步/await 模式

正確撰寫非同步測試程式碼的規則:

  • MSTEST0013 - AssemblyCleanup 應該是有效的(包含非同步規則)
  • MSTEST0027 - 省略測試方法中的非同步後綴
  • MSTEST0028 - 測試夾具方法中抑制非同步後綴
  • MSTEST0039 - 使用較新的 Assert.Throws 方法(非同步變體)
  • MSTEST0040 - 避免在非同步 void 上下文中使用斷言
  • MSTEST0045 - 使用合作取消來處理超時
  • MSTEST0049 - 流程測試上下文消除令牌
  • MSTEST0054 - 使用 CancellationToken 屬性

相關文件: TestContext

數據驅動測試

資料驅動測試情境的規則:

相關文件: 用於資料驅動測試的屬性

生命週期與初始化

測試初始化、清理與生命週期管理的規則:

相關文件: 生命週期

Assertions

正確且有效地使用斷言方法的規則:

相關文件: 斷言

TestContext

正確使用 TestContext 物件的規則:

相關文件: TestContext

測試組態

配置測試執行、平行化及其他測試設定的規則:

  • MSTEST0001 - 使用 Parallelize 屬性
  • MSTEST0015 - 測試方法不應被忽視
  • MSTEST0031 - 不要使用 System.ComponentModel.DescriptionAttribute
  • MSTEST0035 - 使用 DeploymentItem 搭配測試方法或測試類別
  • MSTEST0043 - 在測試方法中使用 retry 屬性
  • MSTEST0045 - 使用合作取消來處理超時
  • MSTEST0055 - 不要忽略字串方法的回傳值
  • MSTEST0059 - 正確使用 Parallelize 屬性
  • MSTEST0061 - 使用 OSCondition 屬性代替執行時檢查

相關文件: 設定 MSTest執行測試

所有規則(快速參考)

規則識別碼 類別 Title 預設嚴重度
MSTEST0001 Performance 使用 Parallelize 屬性 Info
MSTEST0002 Usage 測試類別應當有效 警告
MSTEST0003 Usage 測試方法應該是有效的 警告→錯誤*
MSTEST0004 Design 公開類型應該是測試類別 Info
MSTEST0005 Usage TestContext 應該是有效的 警告
MSTEST0006 Design 避免 ExpectedException 屬性 Info
MSTEST0007 Usage 在測試方法上使用屬性 警告
MSTEST0008 Usage TestInitialize 應該是有效的 警告
MSTEST0009 Usage TestCleanup 應當是有效的 警告
MSTEST0010 Usage ClassInitialize 應該是有效的 警告
MSTEST0011 Usage ClassCleanup 必須有效 警告
MSTEST0012 Usage AssemblyInitialize 應該是有效的 警告
MSTEST0013 Usage AssemblyCleanup 應該是有效的 警告
MSTEST0014 Usage DataRow 必須是有效的 警告
MSTEST0015 Design 測試方法不應被忽視 無(選擇加入)
MSTEST0016 Design 測試類別應該有測試方法 Info
MSTEST0017 Usage 斷言 arg 應該以正確的順序傳遞 Info
MSTEST0018 Usage DynamicData 應為有效 警告
MSTEST0019 Design 偏好 TestInitialize 而非建構子 無(選擇加入)
MSTEST0020 Design 偏好建構子而非 TestInitialize 無(選擇加入)
MSTEST0021 Design 偏好使用Dispose方法而非TestCleanup方法 無(選擇加入)
MSTEST0022 Design 偏好 TestCleanup 而非 Dispose 無(選擇加入)
MSTEST0023 Usage 不要否定布林斷言 Info
MSTEST0024 Usage 請勿儲存靜態的 TestContext 警告
MSTEST0025 Design 偏好使用 Assert.Fail 方法而非使用永遠為假的條件。 Info
MSTEST0026 Usage 斷言式 arg 應避免條件存取 Info
MSTEST0027 Suppression 抑制測試方法中的 async 後綴 N/A
MSTEST0028 Suppression 在測試夾具方法中抑制非同步後綴 N/A
MSTEST0029 Design 公共方法應為測試方法 Info
MSTEST0030 Usage 包含測試方法的型別應該是測試類別 警告
MSTEST0031 Usage 請勿使用 System.ComponentModel.DescriptionAttribute Info
MSTEST0032 Usage 檢查永真斷言條件 Info
MSTEST0033 Suppression 抑制未初始化的不可空參考 N/A
MSTEST0034 Usage 使用 ClassCleanupBehavior.EndOfClass Info
MSTEST0035 Usage 使用 DeploymentItem 搭配測試方法或測試類別 Info
MSTEST0036 Design 不要使用陰影設置 警告
MSTEST0037 Usage 使用正確的斷言方法 Info
MSTEST0038 Usage 避免使用 Assert.AreSame 與值型別比較 Info
MSTEST0039 Usage 使用較新的 Assert.Throws 方法 Info
MSTEST0040 Usage 避免在 async void 上下文中使用斷言 警告
MSTEST0041 Usage 在測試類別中使用基於條件的屬性 警告
MSTEST0042 Usage 重複資料列 警告
MSTEST0043 Usage 在測試方法上使用 retry 屬性 警告→錯誤*
MSTEST0044 Design 偏好 TestMethod 而非 DataTestMethod Info
MSTEST0045 Design 使用合作式取消逾時 Info
MSTEST0046 Usage 使用 Assert 代替 StringAssert Info
MSTEST0048 Usage TestContext 屬性的使用 警告
MSTEST0049 Usage 流程測試上下文消除令牌 Info
MSTEST0050 Usage 全域測試裝置應有效 警告
MSTEST0051 Usage Assert.Throws 應該包含單一陳述句 Info
MSTEST0052 Usage 避免明確使用 DynamicDataSourceType Info
MSTEST0053 Usage 避免在斷言中使用格式參數 Info
MSTEST0054 Usage 使用 CancellationToken 屬性 Info
MSTEST0055 Usage 不要忽略字串方法的回傳值 警告
MSTEST0056 Usage TestMethodAttribute 應該能正確設定 DisplayName。 Info
MSTEST0057 Usage TestMethodAttribute 應該會傳播來源資訊 警告
MSTEST0058 Usage 避免在 catch 區塊中使用斷言 Info
MSTEST0059 Usage 正確使用 Parallelize 屬性 警告
MSTEST0060 Usage 重複的TestMethodAttribute 警告
MSTEST0061 Usage 使用 OSCondition 屬性代替執行時檢查 Info
MSTEST0062 Usage 避免使用 out/ref 測試方法參數 警告
MSTEST0063 Usage 測試類別應該有有效的建構子 警告

* 運行於RecommendedAll模式時已升級為錯誤狀態。

MSTESTEXP

MSTest 的數個 API 會以 ExperimentalAttribute裝飾。 這個屬性表示 API 是實驗性的,而且在未來的 MSTest 版本中可能會移除或變更。 屬性是用來識別尚未穩定且可能不適合生產用途的 API。

MSTESTEXP 診斷會警示您在程式代碼中使用實驗 API。 若要使用 SuppressMessageAttribute隱藏此診斷,請將下列程式代碼新增至您的專案:

using System.Diagnostics.CodeAnalysis;

[assembly: SuppressMessage("MSTESTEXP", "Justification")]

或者,您可以將下列程式代碼新增至專案,以使用預處理器指示詞隱藏此診斷:

#pragma warning disable MSTESTEXP
        // API that is causing the warning.
#pragma warning restore MSTESTEXP