【发布时间】:2019-09-03 07:53:57
【问题描述】:
我正在使用 MOQ 来设置一种方法来抛出 InvalidOperationException。然后我使用 MSTest Assert.ThrowsException 断言该方法抛出了指定的异常。当我调试测试时,它会抛出异常,而不是断言预期的异常已被抛出。
我已经对此进行了搜索,但没有找到与我的问题相关的示例。我已经为方法[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"));
}
}
【问题讨论】:
-
你为什么同时使用
ExpectedException和Assert.ThrowsException?选择一个或另一个。后者在失败时会抛出一个AssertFailedException,无论如何这不会匹配ExpectedException;但是,由于您的Assert确实成立(基于您的模拟),那么您的断言不会失败,这意味着它不会抛出AssertFailedException。 -
还有,真的是扔
InvalidOperationException吗?也许这已被处理,但也引发了其他一些异常? -
编辑后,您在测试资源管理器中看到了什么?屏幕上的绿色还是红色?无论哪种情况,您都应该看到绿色。
标签: c# unit-testing moq mstest