如何在c#中创建用于测试目的的模拟任务对象
本文关键字:模拟 任务 对象 测试 用于 创建 | 更新日期: 2023-09-27 18:18:00
我正在尝试编写一个单元测试,必须模拟返回Task
的异步方法。
在过去,我不得不模拟返回Task<T>
的异步方法。为此,我可以使用Task.FromResult<T>(t)
,但我没有看到它与Task
一起工作。(参见这里:在异步单元测试中存根任务返回方法)
我发现有一件事似乎行得通,那就是Task.Delay(0)
,但这似乎相当粗俗。
Task
对象的正确方法是什么?我只需要一个指示任务完成的Task
,但在将来的情况下,我可能需要一个指示异常引发的Task
或一个永远不会完成的Task
。
由于Task<T>
是Task
的子类型,您可以使用Task。FromResult和它应该工作得很好:
Task fakeTask = Task.FromResult<object>(null);
另一个选项是使用Task。CompletedTask属性,它是为这个目的而创建的:
Task completedTask = Task.CompletedTask;
SomeUser的答案是好的,但需要。net 4.6。因为我正在做的项目是。net 4.5,所以我不得不寻找其他的东西,而我找到的最好的东西是:
Task completedTask = Task.Delay(0);
在单元测试中测试异步方法
[TestMethod]
public async Task FunctionName_ActionTaken_ExpectedResult()
{
await YourFunctionHere();
}
For Mocking访问任务
上的from结果Task moqTask = Task.FromResult<object>(null);