如何断言异常

时间:2019-04-12 14:06:28

标签: c# unit-testing moq mstest

我正在使用最小起订量来设置一种抛出InvalidOperationException的方法。然后,我使用MSTest Assert.ThrowsException断言该方法抛出指定的异常。当我 debug 测试时,它将引发异常,而不是断言预期的异常已引发。

我进行了搜索,没有找到与我的问题相关的示例。我已经向方法[ExpectedException(typeof(InvalidOperationException))]添加了一个属性,但得到的结果相同。我试过将引发异常的代码移到Assert之外,并移到其自己的代码行中,但得到的结果相同。我没有尝试将代码包装到从测试方法中调用的自己的方法中,因为我不了解如何将模拟对象作为参数传递给新方法(我将使用哪种类型?编译器不会例如最小起订量或最小起订量)。

[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"));
    }
}

enter image description here

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:0)

感谢Kenneth K帮助我查看错误。根据我所看到的,我相信当您要断言已引发异常时,无法通过单元测试进行调试。但是您可以运行测试并断言已引发异常。若要正确设置测试以使用MSTest声明异常,请使用ExpectedExceptions属性。虽然我认为在进行单元测试的情况下可以某种方式改为使用Assert.ThrowsException,但我无法使该方法起作用。