共用方式為


MSTest 設計規則

設計規則幫助你建立並維護符合正確設計與良好實務的測試套件。 這些規則著重於測試結構、最佳實務及常見模式,這些模式能產生可維護的測試程式碼。

此類別的規則

規則識別碼 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:啟用取消標記以處理超時。