如何模拟返回Task <IList <>>的方法?

Mag*_*son 11 c# unit-testing asynchronous moq task

我试图单元测试一个返回任务>的方法:

void Main()
{
    var mockRepo = new Mock<IRepository>();
    mockRepo.Setup(x => x.GetAll()).Returns(new List<MyModel>() { new MyModel { Name = "Test" } });  // works

    mockRepo.Setup(x => x.GetAllAsync()).Returns(Task.FromResult(new List<MyModel>() { new MyModel { Name = "Test" } }));  // error

    var result = mockRepo.Object.GetAll();
    result.Dump();
}

public interface IRepository
{
    Task<IList<MyModel>> GetAllAsync();
    IList<MyModel> GetAll();
}

public class MyModel
{
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

但Task返回方法会生成编译器错误:

CS1503参数1:无法从'System.Threading.Tasks.Task <System.Collections.Generic.List <UserQuery.MyModel>'转换为'System.Threading.Tasks.Task <System.Collections.Generic.IList <UserQuery.MyModel >"

我究竟做错了什么?

Ufu*_*arı 10

您可以使用ReturnsAync方法:

IList<MyModel> expected = new List<MyModel>() { new MyModel { Name = "Test" }};
mockRepo.Setup(x => x.GetAll()).ReturnsAsync(expected);
Run Code Online (Sandbox Code Playgroud)