如何在C#中创建用于测试目的的模拟Task对象?

Dan*_*don 2 c# unit-testing asynchronous mocking task

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

在过去,我不得不模拟一个返回的异步方法Task<T>.为此,我可以使用Task.FromResult<T>(t),但我不认为它适用Task.(参见此处:异步单元测试中的Stubbing Task返回方法)

我发现Task.Delay(0)似乎有用的一件事是,但这似乎相当骇人.

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

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

Yuv*_*hap 6

由于Task<T>是一个子类型,Task你可以使用Task.FromResult,它应该工作得很好:

Task fakeTask = Task.FromResult<object>(null);
Run Code Online (Sandbox Code Playgroud)

另一种选择是使用Task.CompletedTask属性,它是为此目的而制作的:

Task completedTask = Task.CompletedTask;
Run Code Online (Sandbox Code Playgroud)