我有
Service.Setup(service => service.AsyncMethod(It.IsAny<Func<Task>>()));
Run Code Online (Sandbox Code Playgroud)
其中 Service 是一个 Mock 并且 AsyncMethod 接受 aFunc<Task>并返回 a Task。通常在我的代码中,我只是await service.AsyncMethod(..).
当我在 Moq 中将此代码作为单元测试运行时,它失败了,给了我一个异常 invocation failed with mock behavior Strict. Invocation needs to return a value and therefore must have a corresponding setup that provides it.
好的,我需要返回一个值。那我为什么做不到
Service.Setup(service => service.AsyncMethod(It.IsAny<Func<Task>>())).Returns(..)
Run Code Online (Sandbox Code Playgroud)
根本?它告诉我它无法解析符号“返回”。我不明白我做错了什么......
可以这样做:
Service.Setup(service => service.AsyncMethod(It.IsAny<Func<Task>>()))
.Returns(Task.CompletedTask);
Run Code Online (Sandbox Code Playgroud)
解决了我自己的问题。
我有一个接口服务
interface IService
{
Task asyncMethod(Func<Task> asyncFunc);
}
Run Code Online (Sandbox Code Playgroud)
我的起订量是这样的
Mock<IService> Service = new Mock<IService>(MockBehavior.Strict);
Service.Setup(service => service.AsyncMethod(It.IsAny<Func<Task>>()));
Run Code Online (Sandbox Code Playgroud)
我无法为安装程序指定.Returns()值,因为它不理解语法,无法识别“返回”符号。改成这样就可以修复了。
Service.Setup<Task>(service => service.AsyncMethod(It.IsAny<Func<Task>>()))
.Returns<Func<Task>>(async (asyncFunc) => await asyncFunc.Invoke());
Run Code Online (Sandbox Code Playgroud)