我在存储库方法中为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);
任何人都可以帮助我
答案 0 :(得分:1)
您指定了方法应返回的确切结果,无论调用哪个参数。所以当然你的方法总是返回相同的结果。
Repository
应该有自己的测试,检查是否为每个过滤器返回了正确的结果。在测试Controller
时,您会模拟Repository
并对结果进行硬编码。