Spring과 JUnit을 사용하여 DAO에 대한 통합 테스트를 작성합니다. 테스트 메소드의 시작 부분에 테스트 데이터를 설정 한 다음 나중에 동일한 테스트 메소드에서 DAO 메소드를 테스트합니다. 문제는 트랜잭션을 플러시/커밋하지 않으면 EntityManager가 데이터 설정에서 방금 만든 엔티티 인스턴스를 반환한다는 것입니다. 테스트가 쓸모 없으므로 항상 통과하게됩니다.단위 테스트 중 트랜잭션을 커밋/플러시합니까?
예.
@Test
@Transactional()
public void loadTreeBasicCase() {
// creates and saved node to DB
Node n = createNode();
// test DAO
Node result = dao.lookup(n.getId());
// verify
assertThat(n, equalTo(result));
}
한 가지 방법은 내 DAO에서 commit() 및/또는 flush() 메소드를 노출하는 것입니다. 하지만 프로덕션 코드에서는이 작업을 거의 수행 할 필요가 없으므로 (EntityManager로 작업하게하는) 작업을 수행하지 않으려합니다. 주석이나 Spring 설정을 통해 이것을 설정하는 방법이 있습니까? 나는 Spring, JPA2 with Hibernate를 사용하고있다.
물론 나를 상기시켜 줘서 고마워. 필자는 DAO를 통해 엔티티 관리자를 사용하는 데 너무 익숙합니다. 필자는 DAO를 호출하여 직접 테스트 할 수 있다는 사실을 잊어 버렸습니다. :) – citress