Return 最小起订量任务

Return Task with moq

问题

我有一个问题,我想对在函数末尾使用 Task.WhenAll() 的代码进行单元测试。但我不知道如何 return 一个“未完成”的任务。

我想 return 来自 Mock(用 Moq 制作)的 Task。有谁知道如何做到这一点?

我试过这样的事情:

_sourceServiceMock.Setup(s => s.ReturnA()).Returns(new Task<List<SourceOneDto>>)

代码示例

所以我想从服务return Task

我想测试的东西基本上是什么样的。

Link to Fiddle

using System.Threading.Tasks;
using System.Collections.Generic;

public class Program
{
    public static async Task Main()
    {
        var sourceService = new SourceService();
        var a = sourceService.ReturnA();
        var b = sourceService.ReturnB();

        await Task.WhenAll(a, b);
        Console.WriteLine(a.Result[0].Data);
    }
}

public interface ISourceService
{
    Task<List<SourceOneDto>> ReturnA();
    Task<List<SourceTwoDto>> ReturnB();
}

public class SourceService : ISourceService
{
    public async Task<List<SourceOneDto>> ReturnA()
    {
        await Task.Delay(1);
        Console.WriteLine("Task one done");
        return new List<SourceOneDto>{new()
        {Data = "data source one"}};
    }

    public async Task<List<SourceTwoDto>> ReturnB()
    {
        await Task.Delay(2);
        Console.WriteLine("Task two done");
        return new List<SourceTwoDto>();
    }
}

public class SourceOneDto
{
    public string Data { get; set; }
}

public class SourceTwoDto
{
    public string Data { get; set; }
}

感谢 Liam 和 CodeCaster。

似乎不​​需要未完成的Task。使用 Task.FromResult();

模拟效果很好

类似

var sourceDto = new SourceOneDto {data: "one"};
_sourceServiceMock.Setup(s => s.ReturnA()).Returns(Task.FromResult(sourceDto));

//This might work as well
_sourceServiceMock.Setup(s => s.ReturnA()).ReturnsAsync(sourceDto);