簡體   English   中英

如何驗證使用特定參數引發的異常?

[英]How can I verify an exception was thrown with a certain parameter?

假設我有以下異常和方法:

public MyException(string type)
{
    /* Does soemthing with the parameter */
}

public void DoSomething()
{
    // ...
    if (/* some rule */)
        throw new MyException("A");
    else
    {
        throw new MyException("B");
    }
}

我想測試我的方法,如何使用Visual Studio單元測試框架驗證是否拋出了具有特定參數的MyException 我通常會選擇[ExpectedException(typeof(MyException)]但我不知道其中哪些異常。

我通常會選擇[ExpectedException(typeof(MyException)]

我建議你不要那樣做。 您沒有告訴我們您使用的是哪個單元測試框架,但是最近這些天大多數都提供類似的信息:

Assert.Throws<MyException>(() => testSubject.DoSomething());

除了其他方面,這將確保僅在您期望的位置拋出異常,而不是在其他任何位置。

接下來,根據您的框架,您可能會發現Assert.Throws返回拋出的異常,因此您可以在其中驗證內容:

var exception = Assert.Throws<MyException>(...);
Assert.AreEqual("A", exception.Message);

請注意,測試確切的消息通常很脆弱-但是如果要測試有關異常的其他內容(例如ArgumentException.ParamName ),則更容易理解。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM