对我的asp.net MVC Web应用程序进行单元测试,我想模拟我的IGenericRepository(我正在使用Moq)。
必须模拟的方法如下所示:
IEnumerable<TEntity> Get(Expression<Func<TEntity, bool>> filter = null,
Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null, string includeProperties = "");
我已经毫无问题地模拟了存储库:
useraccountRepository = new Mock<IGenericRepository<Useraccount>>();
现在我想告诉Moq,当调用我的接口的Get方法时,应该返回一个useraccounts列表:
useraccountRepository.Setup(r => r.Get(u => u.Email == useraccount.Email && u.Password == useraccount.Password)).Returns(useraccounts);
我认为我的第二个lambda中有一个错误,因为这个有效:
useraccountRepository.Setup(r => r.Get(null, null, "")).Returns(useraccounts);
但是我的错误在哪里?
什么也有效:
useraccountRepository.Setup(r => r.Get(u => u.Email == useraccount.Email
&& u.Password == useraccount.Password, null, "")).Returns(useraccounts);
看起来默认参数值不适用于我的模拟。那是为什么?
如果我使用
useraccountRepository.Setup(r => r.Get(u => u.Email == useraccount.Email
&& u.Password == useraccount.Password, null, "")).Returns(useraccounts);
无论如何,然后我的控制器中的方法在调用Get消息时抛出异常:
private bool validateUser(Useraccount useraccount)
{
try
{
Useraccount useraccountLogin = UnitOfWork.UseraccountRepository.Get(
u => u.Email == useraccount.Email && u.Password == useraccount.Password).Single<Useraccount>();
return (useraccountLogin != null);
}
catch (Exception exc)
{
return false;
}
}
我的错误在哪里?
提前谢谢你。 迈克尔
答案 0 :(得分:0)
根据这个问题Moq.Mock<T> - how to setup a method that takes an expression,Moq不支持设置表达式参数的约束。