繁体   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