我有
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(..)
一点都没?它告诉我它无法解析符号'返回'。我不明白我做错了什么......
答案 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);