【发布时间】:2021-12-17 16:03:00
【问题描述】:
问题
我有一个问题,我想对在函数末尾使用 Task.WhenAll() 的代码进行单元测试。但我不知道如何返回“未完成”任务。
我想从 Mock(用 Moq 制作)返回一个 Task。有谁知道如何做到这一点?
我尝试过这样的事情:
_sourceServiceMock.Setup(s => s.ReturnA()).Returns(new Task<List<SourceOneDto>>)
代码示例
所以我想从服务中返回 Task
我想测试的东西基本上是什么样子的。
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