2012-04-06 2 views
4

데이터베이스 테스트에서 CRUD 작업을 포함하는 것이 일반적이라고 생각합니다. 따라서이 함수는 데이터베이스를 수정하여 예상되는 값을 변경합니다. SELECT가 2 행을 리턴하는지 테스트하면, 삭제 테스트가 1 위를 실행하면 실패 할 수도 있습니다. INSERT와 유사합니다. JUnit은 정의 된대로 테스트를 실행하지 않아 예상 값을 어렵게 만듭니다.JUnit 데이터베이스 테스트 및 테스트 순서

모든 테스트에서 데이터베이스를 다시 초기화하면 과도하고 느려질 수 있습니다. 그러면 어떻게이 문제에 접근 할 수 있을까요?

답변

3

예, 스티브 홀 (Steve Hall)은 트랜잭션 테스트를 사용하여 테스트와 테스트 실행 사이의 데이터베이스 일관성 문제를 100 % 해결합니다. Spring은 이러한 유형의 테스트 (transaction management in TestContext Framework 참조)에 대한 매우 정교한 지원을 제공하지만, 테스트없이 구현하는 것은 그리 어렵지 않습니다.

마지막 트랜잭션을 롤백하는 트랜잭션 테스트에서는 테스트에 의해 시작된 트랜잭션의 일부인 경우 데이터에 CRUD 연산을 적용 할 수 있습니다. 테스트가 진행되는 동안 단일 롤백은 데이터베이스에 대한 모든 CRUD 효과를 제거합니다.

0

단위 테스트는 순서에 따라 다르지만 단위 테스트의 경우 실제 데이터베이스를 사용하지 않아야합니다. DBUnit과 같은 것을 사용하여 데이터베이스를 조롱하거나 데이터베이스가 서비스 계층 인터페이스 뒤에 숨겨져있는 경우 모의 작업을 작성하십시오.

+0

데이터베이스와의 통합을 테스트하지 않는 한 @Jeff에 동의합니다. Mockito와 같은 것을 사용하여 데이터 액세스 개체를 조롱해야합니다. – MarkOfHall

1

DBUnit과 같은 것을 볼 수 있습니다. 이것이 요구 사항에 맞지 않으면 데이터베이스 트랜잭션에서 테스트를 래핑 할 수 있습니다. setupteardown 메소드를 사용하여 트랜잭션을 시작 및 롤백 할 수 있습니다.