Return 最小起订量任务
Return Task with moq
问题
我有一个问题,我想对在函数末尾使用 Task.WhenAll() 的代码进行单元测试。但我不知道如何 return 一个“未完成”的任务。
我想 return 来自 Mock(用 Moq 制作)的 Task。有谁知道如何做到这一点?
我试过这样的事情:
_sourceServiceMock.Setup(s => s.ReturnA()).Returns(new Task<List<SourceOneDto>>)
代码示例
所以我想从服务return 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; }
}
感谢 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);
问题
我有一个问题,我想对在函数末尾使用 Task.WhenAll() 的代码进行单元测试。但我不知道如何 return 一个“未完成”的任务。
我想 return 来自 Mock(用 Moq 制作)的 Task。有谁知道如何做到这一点?
我试过这样的事情:
_sourceServiceMock.Setup(s => s.ReturnA()).Returns(new Task<List<SourceOneDto>>)
代码示例
所以我想从服务return 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; }
}
感谢 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);