[英]Moq ReturnsAsync() with no parameters
我使用起訂量。 我模擬了一個類,該類的方法如下所示:
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(() => {})
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.