在 Assert.Multiple 中验证模拟

Fly*_*FoX 3 c# nunit moq

是否可以验证Assert.Multiple块中的方法调用以及对 的其他调用Assert?

SomeProperty当方法调用MyMethod未验证时,我当前的解决方案不会调用 assert on 。接近我想要的唯一方法是将调用移到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);
});
Run Code Online (Sandbox Code Playgroud)

Nko*_*osi 5

验证将抛出自己的异常,断言块不知道如何处理。这就是为什么当验证失败时,之后不会调用任何东西。

文档中的注释还指出

如果抛出任何未处理的异常,测试将立即终止。意外异常通常表明测试本身有错误,因此必须终止它。如果异常发生在一个或多个断言失败被记录后,这些失败将与终止异常本身一起报告。

引用多个断言

考虑以下方法

//...

Assert.Multiple(() => {
  Assert.That(() => myInterfaceMock.Verify(), Throws.Nothing);
  Assert.That(systemUnderTest.SomeProperty, Is.True);
});
Run Code Online (Sandbox Code Playgroud)

如果验证抛出异常,那么它将由它自己的断言处理。