設計規則幫助你建立並維護符合正確設計與良好實務的測試套件。 這些規則著重於測試結構、最佳實務及常見模式,這些模式能產生可維護的測試程式碼。
此類別的規則
| 規則識別碼 | Title | Severity | 修正可用 |
|---|---|---|---|
| MSTEST0004 | 公開類型應該是測試類別。 | Info | Yes |
| MSTEST0006 | 避免使用預期例外屬性。 | Info | Yes |
| MSTEST0015 | 不應忽視測試方法。 | 無(選擇加入) | 否 |
| MSTEST0016 | 測試類別應該有測試方法。 | Info | 否 |
| MSTEST0019 | 偏好 TestInitialize 而非建構器。 | 無(選擇加入) | Yes |
| MSTEST0020 | 偏好建構子而非 TestInitialize。 | 無(選擇加入) | Yes |
| MSTEST0021 | 偏好使用 Dispose 而非 TestCleanup。 | 無(選擇加入) | Yes |
| MSTEST0022 | 偏好 TestCleanup 勝過 Dispose。 | 無(選擇加入) | Yes |
| MSTEST0025 | 偏好使用 Assert.Fail 方法而非永遠為假的條件。 | Info | Yes |
| MSTEST0029 | 公開方法應該是測試方法。 | Info | Yes |
| MSTEST0036 | 不要使用陰影模式。 | 警告 | 否 |
| MSTEST0044 | 偏好 TestMethod 勝過 DataTestMethod。 | Info | Yes |
| MSTEST0045 | 使用協同取消機制來處理超時問題。 | Info | Yes |
常見場景
測試類別結構
在建立測試類別時,這些規則有助於確保設計的正確性:
- MSTEST0004:協助類別保持內部,只有測試類別應該公開。
- MSTEST0016:確保測試類別至少包含一種測試方法。
- MSTEST0029:測試類別中的公開方法應該是測試方法。
初始化模式
MSTest 支援建構子與 TestInitialize 方法。 這些互斥的規則讓你能強制執行一致的模式:
- MSTEST0019:強制執行 TestInitialize 進行初始化(對非同步情境很有用)。
- MSTEST0020:強制初始化建構子(對只讀欄位較佳)。
清理模式
同樣地,請在 Dispose 與 TestCleanup 之間選擇:
- MSTEST0021:執行清理時的處理模式。
- MSTEST0022:強制執行 TestCleanup 以進行清理。
更佳的斷言
- MSTEST0006:使用 Assert.ThrowsExactly 代替 [ExpectedException],以提升精確度。
- MSTEST0025:請使用 Assert.Fail 代替 Assert.IsTrue(false)。
測試品質
- MSTEST0015:標記為被忽略的測試(需手動啟用的規則)。
- MSTEST0036:避免遮蔽基礎類別成員。
- MSTEST0044:除非需要資料驅動測試,否則使用 TestMethod。
- MSTEST0045:啟用取消標記以處理超時。