我有一个类,构造函数需要传入IRepository,代码如下...
并且有一个方法长这样...
我想要测试
我正在尝试以下操作...
当我在NUnit中运行时,我会在这一行上收到错误信息“Sequence Contains No Elements”。
public class UserService
{
public IRepository<User> _repo { get; set; }
public UserService(IRepository<User> repo = null)
{
_repo = repo ?? new UserRepository();
}
并且有一个方法长这样...
public bool IsUserActive(email string)
{
//The method actually does more but to keep it simple lets imagine
// it does this
User user = _repo.Find(u => u.Email == email).First();
return user.IsActive;
}
IRepository看起来像这样。
public interface IRepository<T> : IDisposable where T : IEntity
{
void InsertOrUpdate(T entity);
void Delete(T entity);
IQueryable<T> Find(Func<T, bool> query);
T Find(int id);
void Save();
}
我想要测试
IsUserActive
方法,并确保如果用户的IsActive
字段为false,则它返回false,反之亦然。我正在尝试以下操作...
[Test]
public void IsUserActive_EmailThatWillReturnInactiveUser_ReturnsFalse()
{
//Arrange
var fakeUserRepo = new Mock<IRepository<User>>();
var query = new Func<User, bool>(u => u.Email == "AnyString");
var listOfMatchingUsers = new List<User>()
{
new User
{
Email = "AnyString",
IsActive = False
}
};
IQueryable<User> queryableUsers = listOfMatchingUsers.AsQueryable();
fakeUserRepo.Setup(r => r.Find(query)).Returns(queryableUsers);
var userService = new UserService(fakeUserRepo.Object);
//Act
var result = userService.IsUserActive("AnyString");
//Assert
Assert.IsFalse(result);
}
当我在NUnit中运行时,我会在这一行上收到错误信息“Sequence Contains No Elements”。
var result = userService.IsUserActive("AnyString");
我错在哪里了?