У меня возникают некоторые трудности с модульным тестированием моих методов репозитория NHibernate, в основном из-за того, что им передается выражение и возвращается IQueryable.
Вот один из методов репозитория:
public TEntity FindBy<TEntity>(Expression<Func<TEntity, bool>> expression)
{
return Session.Query<TEntity>().SingleOrDefault(expression);
}
А вот связанный вызов метода:
public Employee Login(string username, string password)
{
return Repository.FindBy<Employee>
(
e => e.Active
&& e.Username.ToLower() == username.ToLower()
&& e.Password == password
);
}
И соответствующий модульный тест:
[Test]
public void ForMatchingEmployeeUsernameAndPassword_ReturnsEmployee()
{
var employee = HelperEmployee.GetEmployee();
repository.Setup(x => x.FindBy(It.IsAny<Expression<Func<Employee, bool>>>())).Returns(employee);
var result = EmployeeService.Login(employee.Username, employee.Password);
Assert.IsNotNull(result);
Assert.IsInstanceOf<Employee>(result);
Assert.AreSame(employee, result);
}
И метод настройки теста:
[SetUp]
public void Init()
{
mock = new Mock<IRepository>();
repository = mock.Object;
EmployeeService = new EmployeeService(repository);
}
Моя проблема возникает, когда я пытаюсь смоделировать метод репозитория, я передаю ему логику, а не выполняю логику для результата, который он возвращает. Поэтому трудно проверить мою логику, поскольку я игнорирую ее и возвращаю все, что установил в макете.
Есть идеи, где я иду не так? Если я могу предоставить больше информации, дайте мне знать ...