小编Shv*_*ets的帖子

具有精确表达式的Moq <Func <TEntity,bool >>

我正在尝试测试存储库的Get方法.签名如下:

public virtual IEnumerable<TEntity> Get(
        Expression<Func<TEntity, bool>> filter = null,
        Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null,
        string includeProperties = "")
Run Code Online (Sandbox Code Playgroud)

通常以下列方式调用此方法:

Department targetDepartment =
            _departmentRepository.Get(department => department.Id == departmentId).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

它适用于真实数据,当我尝试设置此方法以返回具有问题开始的特定lambda的特定"部门"时.

到目前为止,我已经尝试了很多方法来模拟它,这里有一些:

1)

Expression<Func<Department, bool>> filterExpression2 = d => d.Id == DepartmentId;

_departmentRepositoryMock.Setup(repo => repo.Get(
    It.Is<Expression<Func<Department, bool>>>(y => filterExpression2.Compile()(firstDepartment)),
    null, 
    It.IsAny<string>()))
                         .Returns(new List<Department>() { firstDepartment }.AsQueryable());
Run Code Online (Sandbox Code Playgroud)

2)

Expression<Func<Department, bool>> filterExpression2 = d => d.Id == DepartmentId;

_departmentRepositoryMock.Setup(repo => repo.Get(
    It.IsAny<Expression<Func<Department, bool>>>(),
    null, 
    It.IsAny<string>()))
                         .Returns(new List<Department>() { firstDepartment }.Where(filterExpression2.Compile()).AsQueryable());
Run Code Online (Sandbox Code Playgroud)

我看到了许多类似的问题,但不知怎的,它们都没有用.

我想要做的是强制模拟的存储库返回一个特定的部门,具体取决于发送给lambda的'Id'参数.

我知道很多响应使用It.IsAny …

c# linq unit-testing moq

4
推荐指数
1
解决办法
665
查看次数

标签 统计

c# ×1

linq ×1

moq ×1

unit-testing ×1