相关疑难解决方法(0)

如何使用Task <List <T >>模拟返回Task <IEnumerable <T >>的方法?

我正在尝试设置一个单元测试初始化​​器(在Moq中),其中一个接口方法被模拟:

public interface IRepository
{
    Task<IEnumerable<myCustomObject>> GetSomethingAsync(string someStringParam);
}

...

[TestInitialize]
public void Initialize()
{
    var repoMock = new Mock<IRepository>();

    var objectsList = new List<myCustomObject>() {
        new myCustomObject("Something"), 
        new myCustomObject("Otherthing")
    }

    repoMock.Setup<Task<IEnumerable<myCustomObject>>>(
        rep => rep.GetSomethingAsync("ThisParam")
    ).Returns(Task.FromResult(objectsList)); //error here
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是我无法弄清楚如何让方法返回我的方法objectsList.在实践中,这当然可以正常工作,因为List实现了IEnumerable,但是当它包含在Moq中的Task中时它似乎不起作用.我得到的错误是在Returns()方法上:

Argument 1: cannot convert from 'System.Threading.Tasks.Task<
  System.Collections.Generic.List<myCustomObject>>'
to 'System.Threading.Tasks.Task<
  System.Collections.Generic.IEnumerable<myCustomObject>>'
Run Code Online (Sandbox Code Playgroud)

作为一种解决方法,我可以创建另一个简单地创建List<myObj>并返回它的方法IEnumerable<myObj>,但我觉得必须有另一种方法来处理这个更干净的方法.

那么,如何在不创建辅助方法的情况下完成此操作?

c# unit-testing moq

9
推荐指数
2
解决办法
8824
查看次数

标签 统计

c# ×1

moq ×1

unit-testing ×1