模拟任务<ienumerable <t>&gt;与NSubstitute </ienumerable <t>

时间:2015-02-19 11:32:12

标签: asp.net-mvc unit-testing nsubstitute

我在尝试让NSubstituteIEnumerable返回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}}

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()
};