我正在尝试编写一个必须模拟返回Task
的异步方法的单元测试。
过去,我不得不模拟一个返回Task<T>
的异步方法。为此,我可以使用Task.FromResult<T>(t)
,但我不认为它适用于Task
。 (见这里:Stubbing Task returning method in async unit test)
我发现似乎有效的一件事是Task.Delay(0)
,但这似乎相当骇人听闻。
在C#中为测试目的创建模拟Task
对象的正确方法是什么?
我只需要Task
表示任务已完成,但在将来的情况下,我可能需要一个Task
来表示引发了异常或Task
从未完成
答案 0 :(得分:6)
由于Task<T>
是Task
的子类型,您可以使用Task.FromResult,它应该可以正常工作:
Task fakeTask = Task.FromResult<object>(null);
另一种选择是使用Task.CompletedTask Property,它是为此目的而制作的:
Task completedTask = Task.CompletedTask;
答案 1 :(得分:0)
SomeUser的答案很好,但需要.net 4.6。由于我正在研究的项目是.net 4.5,我必须找到别的东西,而我发现的最好的事情是:
Task completedTask = Task.Delay(0);
答案 2 :(得分:-2)
测试单元测试中的异步方法
[TestMethod]
public async Task FunctionName_ActionTaken_ExpectedResult()
{
await YourFunctionHere();
}
用于模拟访问任务中的结果
Task moqTask = Task.FromResult<object>(null);