【发布时间】:2016-06-20 16:08:05
【问题描述】:
我正在尝试在 article 中做示例p>
有一个通用存储库,它具有如下所示的 Get 方法。
public virtual TEntity Get(Func<TEntity, Boolean> where)
{
return DbSet.Where(where).FirstOrDefault();
}
还有一种服务方法,通过用户名和密码来验证用户,使用存储库获取。
public int Authenticate(string username, string password)
{
var user = _unitOfWork.UserRepository.Get(u => u.UserName == username && u.Password == password);
if (user != null && user.UserId > 0)
{
return user.UserId;
}
return 0;
}
文章的作者模拟了这个 get 方法,如下所示。
mockRepo.Setup(s => s.Get(It.IsAny<Func<User, bool>>()))
.Returns((Func<User, bool> expr) => DataInitializer.GetAllUsers().Where(u => u.UserName == CorrectUserName)
.FirstOrDefault(u => u.Password == CorrectPassword));
mockRepo.Setup(s => s.Get(It.IsAny<Func<User, bool>>()))
.Returns((Func<User, bool> expr) => DataInitializer.GetAllUsers().Where(u => u.UserName == WrongUserName)
.FirstOrDefault(u => u.Password == WrongPassword));
每次我在测试中调用 Get 方法时,它都会进行第二次模拟设置。并且它不将参数视为用户名和密码。
[Test]
public void AuthenticateTest()
{
var returnId = _userServices.Authenticate(CorrectUserName, CorrectPassword);
var firstOrDefault = _users.Where(u => u.UserName == CorrectUserName).FirstOrDefault(u => u.Password == CorrectPassword);
if (firstOrDefault != null)
Assert.That(returnId, Is.EqualTo(firstOrDefault.UserId));
}
如何模拟和测试这个 Authenticate 方法。
【问题讨论】:
标签: c# unit-testing moq