Moq 失败,因为它期望返回值但不允许我提供它

dBl*_*sse 5 c# testing moq

我有

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)

根本?它告诉我它无法解析符号“返回”。我不明白我做错了什么......

Nes*_*hta 8

可以这样做:

Service.Setup(service => service.AsyncMethod(It.IsAny<Func<Task>>()))
    .Returns(Task.CompletedTask);
Run Code Online (Sandbox Code Playgroud)


dBl*_*sse 3

解决了我自己的问题。

我有一个接口服务

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)