我正在尝试模拟执行lambda表达式的存储库。我想要执行的方法如下所示:
public SelectListItem GetProtocolById(int protocolId)
{
var protocol = UnitOfWork.ProtocolRepository.FindAll(s => s.PROTOCOL_ID == protocolId).FirstOrDefault();
return new SelectListItem()
{
Text = protocol.USER_DEFINED_ID,
Value = protocolId.ToString()
};
}
我在另一个类
中创建了一个mockRepositoryprotected MockRepository mockRepository = new MockRepository(MockBehavior.Default);
我有一个UnitOfWork和一个协议存储库,我这样模仿它们:
var protocolRepositoryMock = mockRepository.Create<IRepository<PROTOCOL>>();
var unitOfWorkRBMMock = mockRepository.Create<IUnitOfWorkRBM>();
IRepository中的FindAll方法如下所示:
IEnumerable<TEntity> FindAll(Expression<Func<TEntity, bool>> where, params Expression<Func<TEntity, object>>[] includes);
我的IUnitOfWorkRBM中的IRepository定义是这样的:
IRepository<PROTOCOL> ProtocolRepository { get; set; }
我试图模仿unitOfWorkMock,因为它能够像这样执行lambda表达式:
unitOfWorkRBMMock.Setup(s => s.ProtocolRepository.FindAll(It.IsAny<Expression<Func<PROTOCOL, bool>>>()))
.Returns(new Func<Expression<Func<PROTOCOL, bool>>, IEnumerable<PROTOCOL>>(
expr => protocolsList.Where(expr.Compile())));
但是当我尝试调用GetProtocolById
方法时,协议为空。
关于我在这里做错了什么想法?
答案 0 :(得分:1)
可以使用npm install primeng@x.x.x --save
方法访问提供的表达式的值。用它来过滤假名单
查看以下用于解决问题的最小示例。
Returns
答案 1 :(得分:0)
您不需要编译 - 您可以直接返回预期结果。
unitOfWorkRBMMock.Setup(s => s.ProtocolRepository.FindAll(It.IsAny<Expression<Func<PROTOCOL, bool>>>()))
.Returns(new List<PROTOCOL>());