2013-01-24 7 views
1

글쎄 SQL Server에서 정밀한 테스트를 시도 할 때 매우 실망한 문제에 직면 해 있습니다. 나는 hibernate, dbunit, ms sql server2008r2와 jpa의 조합을 사용한다는 것에 주목하자.자바 dbUnit CRUD 테스트 오류

앞서 언급했듯이 dbunit을 사용하여 CRUD 작업을 테스트하려고합니다. dbunit에 대한 문서를 읽고 필자는 필요한 레코드와 작업이 끝날 때 비교할 XML 파일을 만듭니다. 필자의 경우 초기 xml에는 내 엔티티 간의 관계를 나타내는 두 줄만 포함되어 있습니다. 초기 XML

<xml> 
<A id="1" name="nameA"/> 
<B id="1" name="nameB" A_id="1"> 
</xml> 

예상 결과

해체 작업이 정의되지 않은 상태에서 우리가 기본적으로, 깨끗한 삽입 전략 아래에만 설정 작업을 설정 한
<xml> 
<A id="1" name="nameA"/> 
<B id="1" name="nameB" A_id="1"> 
<B id="2" name="nameBB" A_id="1"> 
</xml> 

주 none입니다.

그래서 테이블 A에 대한 참조와 함께 테이블 b에 다른 레코드를 삽입하려고하면 데이터베이스가 깨끗한 경우 괜찮습니다. 그러나 동일한 테스트를 다시 실행할 때마다 외래 키 제약 조건 위반으로 인해 오류가 발생합니다. 이론상 dbunit은 xml에서 검색 한 데이터를 삽입 할 때마다 (클린 삽입 전략) 삭제를 역순으로 수행 한 다음 레코드를 삽입해야합니다. 그러나 앞서 언급했듯이 foreing 키 위반을 나타내는 레코드는 삭제되지 않으므로 역 순서가 실제로 작동하지 않는다고 생각하게됩니다.

아이디어가 있으십니까? 사전에 TNX

+0

당신이 테스트 케이스 설정을 수행하는 데 사용하는 코드를 보여 줄 수있는 열린 트랜잭션이 있는지 여부를 확인할 수 있을까? –

답변

0

세 가지 아이디어 :

ONE : 어쩌면 당신은 태그 'B'를 닫아야는 :

<B id="1" name="nameB" A_id="1"> 

<B id="1" name="nameB" A_id="1"/> 
("/"결국 실종)해야

TWO : 애플리케이션이 다른 테이블의 행을 추가하지 않았는지 확인할 수 있습니다. 예 : B 또는 참조 C

세 :