MSTest 使用規則

使用規則支持正確使用 MSTest 屬性、方法與模式。 這些規則能捕捉常見錯誤,並確保你的測試符合框架的要求與慣例。

此類別的規則

規則識別碼 Title Severity 修正可用
MSTEST0002 測試類別應該是有效的。 警告 Yes
MSTEST0003 測試方法應該是有效的。 警告→錯誤* Yes
MSTEST0005 TestContext 應該是有效的。 警告 Yes
MSTEST0007 在測試方法上使用屬性。 警告 否
MSTEST0008 TestInitialize 應該是有效的。 警告 Yes
MSTEST0009 TestCleanup 應該是有效的。 警告 Yes
MSTEST0010 ClassInitialize 應該是有效的。 警告 Yes
MSTEST0011 ClassCleanup 應該是有效的。 警告 Yes
MSTEST0012 AssemblyInitialize 應該是有效的。 警告 Yes
MSTEST0013 AssemblyCleanup 應該是有效的。 警告 Yes
MSTEST0014 DataRow 應該是有效的。 警告 Yes
MSTEST0017 斷言 args 應該依正確順序傳遞。 Info Yes
MSTEST0018 DynamicData 應該是有效的。 警告 Yes
MSTEST0023 不要否定布林斷言。 Info Yes
MSTEST0024 請勿儲存靜態的 TestContext。 警告 否
MSTEST0026 斷言式 arg 應避免條件存取。 Info 否
MSTEST0030 包含測試方法的類型應該是測試類別。 警告 Yes
MSTEST0031 請勿使用 System.ComponentModel.DescriptionAttribute。 Info Yes
MSTEST0032 檢視永遠為真斷言條件。 Info 否
MSTEST0034 使用 ClassCleanupBehavior.EndOfClass。 Info Yes
MSTEST0035 使用 DeploymentItem 來搭配測試方法或測試類別。 Info 否
MSTEST0037 使用正確的斷言方法。 Info Yes
MSTEST0038 避免 Assert.AreSame 用於值類型。 Info Yes
MSTEST0039 使用較新的 Assert.Throws 方法。 Info Yes
MSTEST0040 避免在非同步 void 上下文中使用斷言。 警告 否
MSTEST0041 在測試類別中使用條件基礎屬性。 警告 Yes
MSTEST0042 複製 DataRow。 警告 否
MSTEST0043 請在測試方法上使用重試屬性。 警告→錯誤* Yes
MSTEST0046 請使用 Assert 代替 StringAssert。 Info Yes
MSTEST0048 TestContext 屬性使用。 警告 否
MSTEST0049 流程測試上下文消除標記。 Info Yes
MSTEST0050 全局測試的裝置應該是有效的。 警告 Yes
MSTEST0051 Assert.Throws 應該包含單一陳述。 Info Yes
MSTEST0052 避免明確使用 DynamicDataSourceType。 Info Yes
MSTEST0053 避免斷言格式參數。 Info Yes
MSTEST0054 使用 CancellationToken 屬性。 Info Yes
MSTEST0055 不要忽略字串方法的回傳值。 警告 否
MSTEST0056 TestMethodAttribute 應該能正確設定 DisplayName。 Info Yes
MSTEST0057 TestMethodAttribute 應該會傳播來源資訊。 警告 否
MSTEST0058 避免在 catch 區塊中使用斷言。 Info 否
MSTEST0059 正確使用 Parallelize 屬性。 警告 否
MSTEST0060 複製 TestMethodAttribute。 警告 Yes
MSTEST0061 使用 OSCondition 屬性代替執行時檢查。 Info Yes
MSTEST0062 避免使用 out 參數和 ref 參數進行測試方法。 警告 Yes
MSTEST0063 測試類別應該有有效的建構子。 警告 否
MSTEST0064 偏好非同步斷言方法。 Info 否
MSTEST0065 避免在集合類型上使用 Assert.AreEqual。 警告 否
MSTEST0067 避免在測試程式碼中同步阻擋呼叫。 資訊(預設為停用) 否
MSTEST0068 用 Assert 代替 CollectionAssert。 Info Yes
MSTEST0069 MSTest 原始碼產生器會忽略 Inherited [TestClass]。 警告 否
MSTEST0070 [MemberCondition] 論點應該是有效的。 警告 否
MSTEST0071 測試方法不應指定與其名稱相等的顯示名稱。 Info Yes
MSTEST0072 [AssemblyFixtureProvider] 不支援預先編入。 警告 否
MSTEST0073 資源鍵最好用常數 [ResourceLock] 。 Info 否
MSTEST0074 會變更程序全域狀態的測試應宣告資源鎖。 Info Yes
MSTEST0075 避免在平行測試中更改目前的目錄。 Info Yes
MSTEST0076 避免在平行化測試中變更整個程序的文化特性。 Info 否
MSTEST0077 避免在平行測試中使用硬編碼或共用的檔案系統路徑。 Info 否
MSTEST0078 [DependsOn] 論點應該是有效的。 警告 否
MSTEST0079 使用 ArchitectureCondition 屬性代替執行時檢查。 Info Yes
MSTEST0080 使用 CICondition 屬性代替環境檢查。 Info Yes
MSTEST0081 [TestFilterProvider] 應參考有效的測試篩選器類型。 警告 否
MSTEST0082 測試類別繼承了來自不同 MSTest 版本的生命週期或測試方法。 警告 否
MSTEST0083 在 Process.Start 之前,使用 [ExecutableCondition] 檢查,而不要使用 File.Exists 檢查。 Info Yes
MSTEST0084 平台相容性屬性應與 [OSCondition] 保持一致。 Info Yes
MSTEST0085 [TestClass] 不應應用於抽象類別。 Info 否
MSTEST0086 移除冗餘的測試方法屬性。 Info Yes
MSTEST0087 避免重複 DataRow 顯示名稱。 警告 否

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

常見場景

測試結構驗證

確保您的測試類別、方法與夾具符合 MSTest 要求:

  • MSTEST0002:測試類別的配置要求(例如,公開、非靜態)。
  • MSTEST0003:測試方法佈局要求(️⚠已升級為錯誤)。
  • MSTEST0030:具有 [TestMethod] 的方法必須位於 [TestClass] 中。
  • MSTEST0063:測試類別建構子驗證。
  • MSTEST0069:直接套用 [TestClass],讓原始碼產生的發現能找到該類別。
  • MSTEST0082:將基礎和衍生的測試類別放在同一個 MSTest 主版本上。
  • MSTEST0085:從抽象基底類別中移除 [TestClass] 。
  • MSTEST0086:移除測試類別已經提供行為的方法屬性。

生命週期方法

驗證初始化與清理方法:

數據驅動測試

確保資料屬性正確使用:

撰寫更佳的陳述

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

  • MSTEST0017:以正確的順序傳遞預期值和實際值。
  • MSTEST0023:不要否定條件(直接使用 Assert.IsFalse)。
  • MSTEST0026:在斷言中避免使用空條件運算子。
  • MSTEST0032:檢視永遠正確的條件。
  • MSTEST0037:使用最合適的主張方法。
  • MSTEST0038:不要用 AreSame 來設定值型別。
  • MSTEST0039:使用 Assert.ThrowsExactly(較新的 API)。
  • MSTEST0046:偏好 Assert 而非 StringAssert。
  • MSTEST0051:斷言。擲骰應該測試單一陳述。
  • MSTEST0053:使用字串插值代替格式參數。
  • MSTEST0058:不要把斷言放在捕捉區塊裡。
  • MSTEST0064:偏好非同步斷言方法,而非非同步程式碼的阻塞。
  • MSTEST0065:避免將 Assert.AreEqual 用於集合類型。
  • MSTEST0068:建議使用 Assert 而非 CollectionAssert。

TestContext 的使用

TestContext 物件的正確使用:

  • MSTEST0005:TestContext 屬性驗證。
  • MSTEST0024:不要將 TestContext 儲存在靜態欄位。
  • MSTEST0048:限制設施進入。
  • MSTEST0049:來自 TestContext 的流量消除標記。
  • MSTEST0054:使用 TestContext.CancellationToken 屬性。

非同步模式

非同步測試程式碼規則:

  • MSTEST0040:避免在非同步 void 方法中使用斷言。
  • MSTEST0067:避免在測試程式碼中使用 Thread.Sleep、Task.Wait 及其他會同步封鎖的呼叫(選擇啟用)。

平行測試安全

平行執行的測試規則:

測試組態

  • MSTEST0031:使用正確的屬性(而非 System.ComponentModel.Description)。
  • MSTEST0035:部署項目使用情況。
  • MSTEST0041:條件屬性必須存在於測試類別上。
  • MSTEST0043:重試屬性必須在測試方法上(️⚠已升級為錯誤)。
  • MSTEST0055:不要忽略字串方法的回傳值。
  • MSTEST0056:在 TestMethodAttribute 上正確設定 DisplayName。
  • MSTEST0057:在自訂的 TestMethodAttribute 中傳播原始碼資訊。
  • MSTEST0059:不要同時使用 Parallelize 和 DoNotParallelize。
  • MSTEST0060:避免重複 TestMethodAttribute。
  • MSTEST0061:使用 OSCondition 屬性來進行平台檢查。
  • MSTEST0070: [MemberCondition] 論證必須引用有效成員。
  • MSTEST0071:不要設定顯示名稱等於測試方法名稱。
  • MSTEST0078:驗證 [DependsOn] 目標與依賴圖。
  • MSTEST0079:使用 ArchitectureCondition 執行時架構檢查來取代。
  • MSTEST0080:請使用 CICondition,不要使用環境檢查。
  • MSTEST0081:驗證測試過濾器提供者的註冊。
  • MSTEST0082:偵測針對另一個 MSTest 主要版本編譯的繼承測試與生命週期方法。
  • MSTEST0083:請使用 ExecutableCondition,而非命令式的可執行檢查。
  • MSTEST0084:將平台相容性屬性 OSCondition與 對齊。