Lambda Expression For Germany不会过滤单元测试

时间:2012-12-03 08:18:16

标签: asp.net-mvc lambda nunit moq

我在存储库方法中为GetMany()使用lambda表达式来过滤大量值中的某些值。它在Mvc代码中工作正常。但是当我编写单元测试时,我对存储库进行了模拟并给出了下面给出的设置

focusRepository.Setup(x => x.GetMany(It.IsAny<Expression<Func<Focus, bool>>>())).Returns(fakeFocus);

但这不起作用。它没有过滤价值。相反,它返回null或所有值。 整个测试方法是

  IEnumerable<Focus> fakeFocus = new List<Focus> 
        {
        new Focus { FocusId = 1, FocusName="Test1",GroupId = 1},
         new Focus { FocusId = 2, FocusName="Test2",GroupId = 1},
        new Focus { FocusId = 3, FocusName="Test3",GroupId = 2}
      }.AsEnumerable();
        focusRepository.Setup(x => x.GetMany(It.IsAny<Expression<Func<Focus, bool>>>())).Returns(fakeFocus);

        GroupGoalFormModel goal = new GroupGoalFormModel();
        GroupController controller = new GroupController();

        ViewResult result = controller.CreateGoal(2) as ViewResult;

        Assert.IsNotNull(result, "View Result is null");
        Assert.IsInstanceOf(typeof(GroupGoalFormModel),
            result.ViewData.Model, "Wrong View Model");

在我的存储库中,我将代码编写为

 IEnumerable<T> GetMany(Expression<Func<T, bool>> where); 

任何人都可以帮助我

1 个答案:

答案 0 :(得分:1)

您指定了方法应返回的确切结果,无论调用哪个参数。所以当然你的方法总是返回相同的结果。

Repository应该有自己的测试,检查是否为每个过滤器返回了正确的结果。在测试Controller时,您会模拟Repository并对结果进行硬编码。