2010-02-09 7 views
2

DbUnit을 Unitils와 함께 사용하고 있는데, 이는 대부분의 시간에 효과적입니다.DbUnit : 증분 ID 생성 문제

오늘 나는 이상한 문제를 발견했다.

상황은 다음과 같습니다

 
<id name="Id"> 
    <generator class="increment"/> 
</id> 
  • 내가 최대한의 ID가 5
  • 입니다 테스트 데이터 집합을 준비 : 내가 최대 절전 모드를 사용하고, "증가"생성기 ID를 가지고

    • 클린 - 인서트로드 전략을 사용합니다.
    • 두 가지 테스트 방법 test1test2이 있으며, 각각이 테이블에 한 행을 추가합니다.
    • test1 메서드 다음에 새로 추가 된 행의 id = 6입니다.
    • test2 이후에 새로 작성된 행은 id = 7입니다.

    이것은 모두 정상입니다. 왜 그런지 이유가 있습니다. 그것은 유지 관리의 관점에서 비록 문제입니다. 내가 둘 사이에 세 번째 테스트 메소드를 추가한다면, 아무런 변화가 없더라도 test2 메소드가 갑자기 실패 할 것입니다. 왜냐하면 행이 다른 ID를 갖기 때문입니다.

    어쨌든 DbUnit 또는 최대 절전 모드에서 각 테스트 방법 이전에 다음 id 값을 계산할 수 있습니까?

답변

3

우선 테스트를 더 이상, 당신은 전체 데이터 집합을 제공해서는 안, 그래뿐만 아니라 id와. 그렇지 않다면 ids에 테스트를하거나 테스트하지 마십시오. 왜 테스트하지 않습니까? 그것의 이미 잘 테스트되고 신뢰할 수있는 것이기 때문입니다. 제 3 자 라이브러리를 테스트 해 본 적이 없다는 것을 기억하십시오. 대부분 제 3 자 라이브러리는 이미 잘 테스트되었습니다. 그러나 id에 의존하지 않는 것은 불가능합니다. 동의합니다.이 문제를 해결하기 위해 모의 수업을 작성해야합니다. 또는 자신이 생성 한 값을 덮어 쓰는 세터 메소드를 제공 할 수도 있습니다.

두 번째 옵션은 항상 빈 테이블을 사용하여 테스트 케이스를 시작합니다. 모든 테스트 케이스가 있기 전에 테이블을 정리하기위한 조명기를 작성할 수 있습니다.

+0

도 마찬가지입니다. – Bozho

+0

테이블 정리는 일반적으로 충분하지 않습니다. 테이블 ID 시퀀스를 재설정해야 할 수도 있습니다. – pimlottc

3

이 솔루션은 생성 된 식별자에 의존하지 않는 것입니다 : 그들은 테스트의 통제 밖에있는

  • . 당신이 그 (것)들을 시험에 의해 제어 할 경우
  • , 당신은 클래스에서 테스트
+0

옳게 말했습니다. +1 –

+0

어떻게해야합니까? 키 열을 어떻게 든 무시할 수있는 방법이 있습니까? –

+0

나는 당신의 테스트 클래스와 테스트중인 클래스에 관한 정보가 없다. – Bozho