【问题标题】:Return Task with moq以最小起订量返回任务
【发布时间】:2021-12-17 16:03:00
【问题描述】:

问题

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

我想从 Mock(用 Moq 制作)返回一个 Task。有谁知道如何做到这一点?

我尝试过这样的事情:

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

代码示例

所以我想从服务中返回 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; }
}

【问题讨论】:

  • 您在标签和标题中提到了起订量,但没有显示起订量代码?还是 SourceService 是您的模拟对象?
  • 你为什么想要一个“未完成”的任务?为什么不Task.FromResult
  • @CodeCaster sourceservice 本来就是我想要嘲笑的。但是,是的,我可以添加我希望会起作用的内容。
  • 所以你想测试Task.WhenAll()是否等到你通过的所有任务完成?或者你想准确地测试什么,为什么你认为你需要通过不完整的任务?
  • @CodeCaster 我想在WhenAll 处理数据后对其进行测试。我不知道我可以通过它完成的任务

标签: c# unit-testing nunit moq


【解决方案1】:

感谢 Liam 和 CodeCaster。

似乎不需要不完整的Tasks。使用 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-23
    • 1970-01-01
    • 2019-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多