NHibernate 저장소 메소드를 테스트하는 데 몇 가지 어려움이 있습니다. 기본적으로 표현식이 전달되고 IQueryable을 반환하기 때문입니다.유닛 테스트 NHibernate 저장소
여기 저장소 방법 중 하나 :
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);
}
0,123,
및 테스트 설정 방법 : I 시도하고 저장소 방법을 조롱 할 때
[SetUp]
public void Init()
{
mock = new Mock<IRepository>();
repository = mock.Object;
EmployeeService = new EmployeeService(repository);
}
내 문제는 내가 그것을 반환 결과에 로직을 실행하기보다는 그것에 논리를 통과하고있어, 발생한다. 그래서 내가 그것을 무시하고 내가 모의 작업에서 설정 한 것을 되돌려 놓기 때문에 내 논리를 테스트하는 것은 어렵습니다.
내가 잘못 가고있는 아이디어가 있습니까? 더 많은 정보를 제공해 주시면 ...
'EmployeeService'에 주입됩니다. 'EmployeeService'를 어떻게 구성하고 있습니까? – Jonathan
안녕하세요, Jonathon, 저는 테스트 픽스쳐 SetUp 메소드에 주입하고 있습니다 : EmployeeService = new EmployeeService (repository); – timothyclifford
게시 한 테스트의 첫 번째 행은'저장소 '의 정의를 보여줍니다. 이것은'SetUp' 메쏘드가 호출 된 이후에 발생합니다. 이것은 모의이 사용되지 않는다는 것을 의미합니다. 아마도 위의'SetUp' 메소드를 추가하십시오. – Jonathan