簡體   English   中英

模擬LINQ表達式-Moq

[英]Mocking LINQ Expressions - Moq

我如何使用Moq模擬-Expression>?

我正在嘗試模擬對我的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);
}

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM