簡體   English   中英

如何斷言異常已被拋出

[英]How to assert an exception has been thrown

我正在使用MOQ設置一個拋出InvalidOperationException的方法。 然后我使用MSTest Assert.ThrowsException斷言該方法拋出指定的異常。 當我調試測試時,它會拋出異常,而不是斷言已拋出預期的異常。

我搜索了這個,並沒有提出與我的問題相關的例子。 我已經為方法添加了一個屬性[ExpectedException(typeof(InvalidOperationException))]但是我得到了相同的結果。 我已經嘗試將拋出異常的代碼移到Assert之外並進入它自己的代碼行,但是我得到了相同的結果。 我沒有嘗試將代碼包裝到從測試方法調用的自己的方法中,因為我不明白如何將模擬對象作為參數傳遞給新方法(我將使用什么類型?編譯器不會像Moq或MOQ)。

[TestClass]
public class UnitTest1
{
    [ExpectedException(typeof(InvalidOperationException))]
    [TestMethod]
    public void TestMethod1()
    {
        var mock = new Mock<IFoo>();

        // throwing when invoked with specific parameters
        mock.Setup(foo => 
             foo.DoSomething("reset")).Throws<InvalidOperationException>();
        //mock.Object.DoSomething("reset");
        Assert.ThrowsException<InvalidOperationException>(() => 
             mock.Object.DoSomething("reset"));
    }
}

在此輸入圖像描述

在此輸入圖像描述

在此輸入圖像描述

感謝Kenneth K幫我看錯。 根據我所看到的情況,我相信當你的意圖是斷言已拋出異常時,無法通過單元測試進行調試。 但是你可以運行測試並聲明已拋出異常。 要使用MSTest正確設置測試以聲明異常,請使用ExpectedExceptions屬性。 雖然我假設它可能在某種情況下使用Assert.ThrowsException,但在單元測試的情況下,我無法使該方法工作。

暫無
暫無

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

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