验证Assert.Multile中的mock



是否可以验证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);

只是指定它必须运行的时间,而不在断言中

最新更新