共用方式為


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 在測試類別中使用條件基礎屬性。 警告
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 測試類別應該有有效的建構子。 警告

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

常見場景

測試結構驗證

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

  • MSTEST0002:測試類別的配置要求(例如,公開、非靜態)。
  • MSTEST0003:測試方法佈局要求(️⚠已升級為錯誤)。
  • MSTEST0030:具有 [TestMethod] 的方法必須位於 [TestClass] 中。
  • MSTEST0063:測試類別建構子驗證。

生命週期方法

驗證初始化與清理方法:

數據驅動測試

確保資料屬性正確使用:

撰寫更佳的陳述

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

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

TestContext 的使用

TestContext 物件的正確使用:

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

非同步模式

非同步測試程式碼規則:

  • MSTEST0040:避免在非同步 void 方法中使用斷言。

測試組態

  • MSTEST0031:使用正確的屬性(而非 System.ComponentModel.Description)。
  • MSTEST0035:部署項目使用情況。
  • MSTEST0041:條件屬性必須存在於測試類別上。
  • MSTEST0043:重試屬性必須在測試方法上(️⚠已升級為錯誤)。
  • MSTEST0055:不要忽略字串方法的回傳值。
  • MSTEST0056:在 TestMethodAttribute 上正確設定 DisplayName。
  • MSTEST0057:在自訂的 TestMethodAttribute 中傳播原始碼資訊。
  • MSTEST0059:不要同時使用 Parallelize 和 DoNotParallelize。
  • MSTEST0060:避免重複 TestMethodAttribute。
  • MSTEST0061:使用 OSCondition 屬性來進行平台檢查。