如何在c#中创建用于测试目的的模拟任务对象

本文关键字:模拟 任务 对象 测试 用于 创建 | 更新日期: 2023-09-27 18:18:00

我正在尝试编写一个单元测试,必须模拟返回Task的异步方法。

在过去,我不得不模拟返回Task<T>的异步方法。为此,我可以使用Task.FromResult<T>(t),但我没有看到它与Task一起工作。(参见这里:在异步单元测试中存根任务返回方法)

我发现有一件事似乎行得通,那就是Task.Delay(0),但这似乎相当粗俗。

在c#中为测试目的创建模拟Task对象的正确方法是什么?

我只需要一个指示任务完成的Task,但在将来的情况下,我可能需要一个指示异常引发的Task或一个永远不会完成的Task

如何在c#中创建用于测试目的的模拟任务对象

由于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);