为了对我的 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 方法被调用时,应该返回一个用户帐户列表:
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;
}
}
我的错误在哪里?
先感谢您。迈克尔