2012-11-28 1 views
0

나는 Hibernate를 사용하는 Spring 3.2 애플리케이션과 몇몇 JUnit 4 테스트 케이스를 가지고있다. MySQL 5를 데이터베이스로 사용하고 있습니다.Spring 3.2 JUnit4 테스트 케이스는 롤백 할 때 통과하지만 롤백하지 않을 때 실패합니까?

롤백되는 DAO 클래스에 대한 테스트 사례를 작성할 때 테스트 케이스가 통과합니다. 그러나 테스트 케이스에 롤백하지 말라고 지시하면 (@Rollback (false)) 테스트 케이스가 실패합니다. 이 때문에 defaultRollback = true 일 때 통과하는 테스트 케이스의 유효성을 신뢰하지 않습니다.

문제의 테스트 케이스는 많은 [팀] 개체가있는 [회사] 개체를 삭제할 때입니다. [팀] 개체는 많은 하위 [팀] 개체를 가질 수도 있습니다.

[회사]를 삭제할 때 삭제 대상을 개체에 계단식으로 연결합니다. [Team] 객체를 삭제할 때 삭제를 하위 [Team] 객체에 계단식으로 지정하지 않았으므로 MySQL에서 발생하는 외래 키 제약 조건 위반 예외가 있습니다. 테스트 케이스 (롤백하도록 설정된 경우)가 통과합니다! 그러나, 그것은 틀림없이, shouldnt? 테스트 케이스에서 롤백을 false로 설정하면 실패하고 MySQL 컨 스트레인 트 위반 예외에 대해 알려줍니다.

아무쪼록 부탁드립니다. @Rollback을 true로 설정하고 false로 설정하면 테스트 케이스가 다르게 반응하는 이유는 무엇입니까?

답변

0

플러시 또는 플러시의 문제라고 생각합니다. 변경 사항이 datebase로 보내지지 않기 때문에 Rollback 모드에서 어떤 문제를 숨기고 있다고 생각합니다.

롤업 모드에서 테스트가 끝나면 em.flush()을 추가하십시오. 문제가 발생하면 문제를 해결할 수 있습니다.

관련 문제