Dot-Net

MSTest ExpectedException 失敗

  • November 9, 2017

我通常使用 Nunit,但在我目前的項目中,我使用的是 MSTest。現在我有一個測試,它期望出現異常但一直失敗,我不知道為什麼。

這是我用來複製問題的一個簡單範例:

[TestMethod, ExpectedException(typeof(ErrorResponseException))]
       public void should_throw_exception()
       {
           throw new ErrorResponseException();
       }

ErrorResponseException 是一個僅從 Exception 繼承的類,就是這樣,任何人都知道為什麼會失敗,我希望它能夠通過。

在 NUnit 中,我會避免使用 ExpectedException 並改用 Assert.Throws (Exception Asserts)。它為您提供更細粒度的控制。否則,如果測試方法的任何部分拋出該異常,測試將通過。

在 MSTest 中,您可以獲得與老式結構相同級別的控制:

try
{
   // code that you expect to throw goes here
   Assert.Fail("Expected MyException");
}
catch (MyException ex)
{
   // optionally assert on the message - this can make tests fragile though
}

有了這個,就不需要 ExpectedException 屬性。

(這個概念來自 David Astels 的《測試驅動開發:實用指南》一書。)

引用自:https://stackoverflow.com/questions/7994973