您的方法没有任何回调,因此没有理由使用.CallBack()
。您可以使用.Returns()
和Task.FromResult简单地返回具有所需值的Task,例如:
MyType someValue=...;
mock.Setup(arg=>arg.DoSomethingAsync())
.Returns(Task.FromResult(someValue));
Moq 4.2有两种新的扩展方法可以帮助实现这一点。
mock.Setup(arg=>arg.DoSomethingAsync())
.ReturnsAsync(someValue);
mock.Setup(arg=>arg.DoSomethingAsync())
.ThrowsAsync(new InvalidOperationException());
正如Seth Flowers在另一个答案中提到的那样,ReturnsAsync
仅适用于返回a的方法Task<T>
。对于仅返回Task的方法,
.Returns(Task.FromResult(default(object)))
可以使用。
如此答案所示,在.NET 4.6中,它简化为.Returns(Task.CompletedTask);
:
mock.Setup(arg=>arg.DoSomethingAsync())
.Returns(Task.CompletedTask);