我正在使用最小起订量来设置一种抛出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"));
}
}
答案 0 :(得分:0)
感谢Kenneth K帮助我查看错误。根据我所看到的,我相信当您要断言已引发异常时,无法通过单元测试进行调试。但是您可以运行测试并断言已引发异常。若要正确设置测试以使用MSTest声明异常,请使用ExpectedExceptions属性。虽然我认为在进行单元测试的情况下可以某种方式改为使用Assert.ThrowsException,但我无法使该方法起作用。