模拟LINQ表达式 - Moq

时间:2013-09-10 15:30:52

标签: c# mocking expression moq moq-3

我如何模拟的东西 - 表达式>使用Moq?

我正在尝试模拟对我的repo层的调用,该调用接受LINQ表达式来构造查询。我正在尝试以下语法,但它失败了。不会调用SearchFor方法。

var array = new Employee[1];

array[0] = new Employee() { ID = 1234, Name = "Test" };

MockEmployeeRepo.Setup(x => x.SearchFor(It.IsAny<Expression<Func<Employee, bool>>>()))
            .Returns(array.AsQueryable);

var list = EmployeeService.GetEmployees("Test");

MockEmployeeRepo.Verify(x => x.SearchFor(x1 => x1.Name == "Test"), Times.Once());

Assert.AreEqual("Test", list[0].Name);

此处GetEmployees方法如下所示。

public IEnumerable<Employee> GetEmployees(string name)
{
    return repo.SearchFor(x => x.Name == name);
}

1 个答案:

答案 0 :(得分:0)

Moq不支持Expression函数,因此这是最好的解决方案。使用此nuget软件包Moq.Expression

// import namespace
using MoqExpression;

// it will work
MockEmployeeRepo.Setup(x => x.SearchFor(MoqHelper.IsExpression<Employee>(s => s.Name.Equals("Test")))).Returns(array.AsQueryable);

有关更多文档:https://github.com/ovaishanif94/Moq.Expression