gpt4 book ai didi

c# - Moq ReturnsAsync() 没有参数

转载 作者:太空狗 更新时间:2023-10-29 17:40:12 26 4
gpt4 key购买 nike

我使用最小起订量。我模拟了一个类,它的方法如下所示:

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(最近发布)或更新版本中。您可以在 this 中找到更多信息StackOverflow 答案。

ReturnsAsync 用于异步返回值。当您只返回一个 Task 时,您实际上根本没有返回任何异步值,因此 ReturnsAsync 在这里并不真正“适合”。

如果这不符合您的需要,您将不得不使用 Task.FromResult(),很遗憾。据我所知,这确实是创建“已完成”任务的唯一方法 - 除了new Task(() => {})(尽管这并不是真正的已完成的任务,而不是等待时立即完成的任务) new Task(() => {}) 会导致死锁。使用 Task.Run(() => {})

关于c# - Moq ReturnsAsync() 没有参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27294734/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com