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

时间:2014-08-15 20:26:22

标签: c# testing moq

我有

Service.Setup(service => service.AsyncMethod(It.IsAny<Func<Task>>()));

其中Service是Mock,AsyncMethod接受Func<Task>并返回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(..)

一点都没?它告诉我它无法解析符号'返回'。我不明白我做错了什么......

2 个答案:

答案 0 :(得分:3)

解决了我自己的问题。

我有一个界面服务

interface IService 
{
    Task asyncMethod(Func<Task> asyncFunc);
}

我的Moq就是这样

Mock<IService> Service = new Mock<IService>(MockBehavior.Strict);
Service.Setup(service => service.AsyncMethod(It.IsAny<Func<Task>>()));

我无法为安装程序指定.Returns()值,因为它不理解语法,“返回”符号无法识别。将其更改为此可以解决此问题。

Service.Setup<Task>(service => service.AsyncMethod(It.IsAny<Func<Task>>()))
    .Returns<Func<Task>>(async (asyncFunc) => await asyncFunc.Invoke());

答案 1 :(得分:0)

可以这样操作:

Service.Setup(service => service.AsyncMethod(It.IsAny<Func<Task>>()))
    .Returns(Task.CompletedTask);