gpt4 book ai didi

c# - 我如何告诉 Moq 返回任务?

转载 作者:IT王子 更新时间:2023-10-29 03:28:35 25 4
gpt4 key购买 nike

我有一个声明的接口(interface)

Task DoSomethingAsync();

我正在使用 MoqFramework 进行测试:

[TestMethod()]
public async Task MyAsyncTest()
{
Mock<ISomeInterface> mock = new Mock<ISomeInterface>();
mock.Setup(arg => arg.DoSomethingAsync()).Callback(() => { <my code here> });
...
}

然后在我的测试中,我执行调用 await DoSomethingAsync() 的代码。而测试只是在那条线上失败了。我做错了什么?

最佳答案

您的方法没有任何回调,因此没有理由使用 .CallBack() .您可以使用 .Returns() 简单地返回具有所需值的任务。和 Task.FromResult ,例如:

MyType someValue=...;
mock.Setup(arg=>arg.DoSomethingAsync())
.Returns(Task.FromResult(someValue));

更新 2014-06-22

Moq 4.2 有两个新的扩展方法来帮助解决这个问题。

mock.Setup(arg=>arg.DoSomethingAsync())
.ReturnsAsync(someValue);

mock.Setup(arg=>arg.DoSomethingAsync())
.ThrowsAsync(new InvalidOperationException());

更新 2016-05-05

正如 Seth Flowers 在 other answer 中提到的那样, ReturnsAsync仅适用于返回 Task<T> 的方法.对于只返回任务的方法,

.Returns(Task.FromResult(default(object)))

可以使用。

如图this answer ,在 .NET 4.6 中,这被简化为 .Returns(Task.CompletedTask); ,例如:

mock.Setup(arg=>arg.DoSomethingAsync())        
.Returns(Task.CompletedTask);

关于c# - 我如何告诉 Moq 返回任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21253523/

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