Moq 返回不带参数的异步()
本文关键字:异步 参数 返回 Moq | 更新日期: 2023-09-27 18:33:10
我使用最小起订量。我模拟了一个类,它的方法如下所示:
public async Task DoSomething()
{
// do something...
}
我像下面这样设置它:
SomeMock.Setup(x => x.DoSomething())
.Callback(() => ... ))
.Returns(Task.FromResult(default(int)));
我不喜欢最后一行:.Returns(Task.FromResult(default(int)))
.有没有办法以更优雅的方式设置异步返回。我知道有一个方法ReturnsAsync()
但它有一个参数。我的方法只返回Task
所以我没有ReturnsAsync()
的参数。
尝试执行以下操作:
someMock.Setup(x => x.DoSomething())
.Callback(() => {})
.Returns(Task.CompletedTask);
请注意,Task.CompletedTask
仅存在于 .NET 4.6(最近发布)或更高版本中。您可以在此StackOverflow答案中找到更多信息。
ReturnsAsync
用于异步返回值的情况。当你只返回一个Task
时,你实际上根本没有返回任何异步值,所以ReturnsAsync
在这里并不真正"适合"。
如果这不符合您的需求,您将不得不使用 Task.FromResult()
,不幸的是。据我所知,这确实是创建"已完成"任务的唯一方法 - 除了可能new Task(() => {})
(尽管这不是一个真正完成的任务,而不是一个在等待时立即完成的任务)new Task(() => {})
会导致死锁。使用 Task.Run(() => {})
.