Moq Return using Where()

随声附和 提交于 2019-12-24 14:42:37

问题


I'm trying to set up a mock to return data from a collection:

    private IList<DutyCategory> dutyCategories;
    private Mock<IDutyCategoryService> mockService;

    [TestInitialize()]
    public void UnitTestSetup()
    {
        dutyCategories = new List<DutyCategory>()
        {
            new DutyCategory(){Description = "Description",ID = 1,IsActive = true,Name = "Test 1",OrganizationID = 1}
        };
        mockService = new Mock<IDutyCategoryService>();
        mockService.Setup(a => a.GetDutyCategories()).ReturnsAsync(dutyCategories);
        mockService.Setup(a => a.GetDutyCategoriesByOrganization(It.IsAny<int>()))
            .ReturnsAsync((int id) => dutyCategories.Where(n=>n.OrganizationID == id));
    }

That last line in the UnitTestSetup is the problem. I get the following error:

Cannot convert lambda expression to type 'System.Collections.Generic.IEnumerable' because it is not a delegate type

How do i mock GetDutyCategoriesByOrganization so that it returns a subset of list dutyCategories?


回答1:


This appears to work:

 .Returns<int>(i => Task.FromResult(dutyCategories.Where(n => n.OrganizationID == i)));


来源:https://stackoverflow.com/questions/27558597/moq-return-using-where

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!