是否可以验证Assert.Multiple
块中的方法调用以及对Assert
的其他调用?
当对MyMethod
的方法调用不进行验证时,我当前的解决方案不在SomeProperty
上调用断言。接近我想要的唯一方法是将对myInterfaceMock.Verify
的调用移到最后,但当有多个方法调用需要验证时,这将不再有效。
var mInterfaceMock = new Mock<IMyInterface>()
.Setup(x => x.MyMethod())
.Verifiable();
var systemUnderTest = new MyClass(myInterfaceMock.Object);
systemUnderTest.MethodToTest();
Assert.Multiple(() => {
myInterfaceMock.Verify();
Assert.That(systemUnderTest.SomeProperty, Is.True);
});
验证将抛出自己的异常,断言块不知道如何处理。这就是为什么当验证失败时,之后不会调用任何东西
文件中的注释也说明了
如果抛出任何未处理的异常,测试将立即终止。意外异常通常表示测试本身有错误,因此必须终止测试。如果异常发生在记录了一个或多个断言失败之后,则这些失败将与终止异常本身一起报告。
引用多个断言
考虑以下方法
//...
Assert.Multiple(() => {
Assert.That(() => myInterfaceMock.Verify(), Throws.Nothing);
Assert.That(systemUnderTest.SomeProperty, Is.True);
});
如果验证抛出异常,那么它将由自己的断言来处理。
如果你的MethodToTest()
没有返回任何东西,我建议你只验证方法是否运行,就像你试图使用断言一样,但我建议你这样做:
mInterfaceMock.Verify(x => x.MethodToTest(), Times.Once);
只是指定它必须运行的时间,而不在断言中