在Assert.Multiple中验证模拟

问题描述

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

当对SomeProperty的方法调用未验证时,我当前的解决方案未在MyMethod上调用断言。 接近我想要的唯一方法是将对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);
});

解决方法

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

文档中的注释也指出

如果引发任何未处理的异常,则测试将立即终止。意外的异常通常表示测试本身有错误,因此必须将其终止。如果在记录一个或多个断言失败之后发生异常,则将报告这些失败以及终止异常本身。

参考Multiple Asserts

请考虑以下方法

//...

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

如果验证引发异常,那么它将通过其自己的断言进行处理。

,

如果您的{ "azureFunctions.deploySubpath": "target/azure-functions/functionsjava","azureFunctions.projectLanguage": "Java","azureFunctions.projectRuntime": "~2","debug.internalConsoleOptions": "neverOpen","azureFunctions.preDeployTask": "package","java.configuration.updateBuildConfiguration": "interactive","azureFunctions.templateFilter": "All","java.home": "C:/Program Files/Zulu/zulu-11","java.configuration.runtimes": [ { "name": "JavaSE-1.8","path": "C:/Program Files/Zulu/zulu-8","default": true },{ "name": "JavaSE-11","path": "C:/Program Files/Zulu/zulu-11",} ] } 未返回任何内容,我建议您仅验证该方法是否运行,就像您要尝试使用assert一样,但是我建议这样做:

MethodToTest()

仅指定它必须运行的时间,而不必在断言之内

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...