在Unitofwork's储存库中模拟Lambda存在问题
本文关键字:模拟 Lambda 存在 问题 储存库 Unitofwork | 更新日期: 2023-09-27 18:08:57
我使用。net 4与c#, EntityFramework 4和Moq 4。我试图模拟我的UnitOfWork,一个储存库,最后是一个方法调用。
这是我遇到麻烦的代码
var unitOfWorkMock = new Mock<UnitOfWork>();
var cFieldRepositoryMock = new Mock<IRepository<CField>>();
System.Linq.Expressions.Expression<Func<CField, bool>> query = (x) => x.CID == c && x.FID == parentFID;
cFieldRepositoryMock.Setup(x => x.GetFirst(query));
GetFirst:
方法签名 T GetFirst(Expression<Func<T, bool>> query = null,
Func<IQueryable<T>, IOrderedQueryable<T>> orderBy = null);
CField:
public class CField
{
public CField()
{
//do stuff
}
public int ID { get; set; }
public int FID { get; set; }
public int CID { get; set; }
}
我期望发生的事情:我期望当我调用cFieldRepositoryMock的GetFirst方法时,它将匹配我传入的lambda表达式,而不是我在设置中定义的表达式。
发生了什么:我得到一个编译器错误的设置分配:"表达式树可能不包含使用可选参数的调用或调用"
我显然做错了什么,我只是不确定是什么。任何建议都很感激,我对单元测试相当陌生。
谢谢!AFrieze
您收到的错误似乎实际上是表达式的限制:
要对这样的东西进行单元测试,可以考虑使用It。IsAny(正如Carsten已经建议的):cFieldRepositoryMock.Setup(x => x.GetFirst(query, It.IsAny<Func<IQueryable<CField>, IOrderedQueryable<CField>>>()));