使用規則支持正確使用 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 | 測試類別應該有有效的建構子。 | 警告 | 否 |
* 運行於Recommended和All模式時已升級為錯誤狀態。
常見場景
測試結構驗證
確保您的測試類別、方法與夾具符合 MSTest 要求:
- MSTEST0002:測試類別的配置要求(例如,公開、非靜態)。
- MSTEST0003:測試方法佈局要求(️⚠已升級為錯誤)。
- MSTEST0030:具有 [TestMethod] 的方法必須位於 [TestClass] 中。
- MSTEST0063:測試類別建構子驗證。
生命週期方法
驗證初始化與清理方法:
- MSTEST0008:測試初始化驗證。
- MSTEST0009:TestCleanup 驗證。
- MSTEST0010:ClassInitialize 驗證。
- MSTEST0011:ClassCleanup 驗證。
- MSTEST0012:AssemblyInitialize 驗證。
- MSTEST0013:AssemblyCleanup 驗證。
- MSTEST0034:將 ClassCleanupBehavior 設為 EndOfClass。
- MSTEST0050:全球測試夾具驗證。
數據驅動測試
確保資料屬性正確使用:
- MSTEST0007:資料屬性必須設於測試方法上。
- MSTEST0014:DataRow 驗證。
- MSTEST0018:DynamicData 驗證。
- MSTEST0042:偵測重複資料列。
- MSTEST0052:使用 AutoDetect 來處理 DynamicDataSourceType。
- MSTEST0062:避免使用 out/ref 參數。
撰寫更佳的陳述
正確且有效斷言使用的規則:
- 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 屬性來進行平台檢查。