我正在尝试设置一个单元测试初始化器(在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>,但我觉得必须有另一种方法来处理这个更干净的方法.
那么,如何在不创建辅助方法的情况下完成此操作?