我在尝试让NSubstitute
从IEnumerable
返回Task
界面时遇到问题。
工厂我在嘲笑:
public interface IWebApiFactory<T> : IDisposable
{
<T> GetOne(int id);
Task<IEnumerable<T>> GetAll();
Task<IEnumerable<T>> GetMany();
void SetAuth(string token);
}
测试方法:
[TestMethod]
public async Task TestMutlipleUsersAsViewResult()
{
var employees = new List<EmployeeDTO>()
{
new EmployeeDTO(),
new EmployeeDTO()
};
// Arrange
var factory = Substitute.For<IWebApiFactory<EmployeeDTO>>();
factory.GetMany().Returns(Task.FromResult(employees));
}
我得到的错误是:
无法转换为'System.Threading.Tasks.Task&gt;到System.Func&gt;&gt;
即使IEnumerable
List
IEnumerable
,我也会将这个问题传递给NSubstitute
,这是一个问题吗?
编辑:
这些是public static ConfiguredCall Returns<T>(this T value, Func<CallInfo, T> returnThis, params Func<CallInfo, T>[] returnThese);
public static ConfiguredCall Returns<T>(this T value, T returnThis, params T[] returnThese);
{{1}}
答案 0 :(得分:4)
没有任何重载与您传递的值匹配良好。第二个签名public static ConfiguredCall Returns<T>(this T value, T returnThis, params T[] returnThese);
期望与函数的返回类型具有相同类型的值,因此它不是最佳匹配。
解决此问题的最简单方法是将员工声明更改为IEnumerable<EmployeeDTO>
:
IEnumerable<EmployeeDTO> employees = new List<EmployeeDTO>()
{
new EmployeeDTO(),
new EmployeeDTO()
};