ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • DBUnit 사용시 테스트 데이터 INSERT 문제
    Object & Test 2011. 10. 12. 19:20
    데이터베이스와 관련된 기능의 검증을 위해 단위 테스트를 작성할 때 DbUnit을 사용하면 많은 도움을 얻을 수 있다. DbUnit을 통해 테스트 메소드 실행 전에 픽스처를 데이터베이스에 입력하고 테스트가 종료되면 삭제하는 일을 아주 편하게 할 수 있기 때문이다. 이를 통해, 테스트 메소드의 독립적인 수행을 보장하고, 테스트 데이터베이스를 항상 깨끗한 상태로 유지할 수 있다.

    하지만 가끔 문제가 생기는 경우가 있는데 동일한 테이블에 넣어야 하는 테스트 데이터의 크기가 다른 경우이다. 보통 다음과 같은 경우가 되겠다.

    <dataset>
    <TEST-TABLE column-1="data1" column-2="data2"/>
    <TEST-TABLE column-1="data1" column-2="data2" column-3="data3" column-4="data4"/>
    </dataset>



    이 경우 테스트케이스를 구동하면 column-3, column-4의 값이 누락되어 입력이 안된다. 상위에 있는 데이터셋(dataset)에 컬럼이 두 개만 설정되어 있기 때문이다. DBUnit은 동일한 테이블에 대해 첫 번째 정의된 데이터셋의 컬럼 수를 기준으로 데이터를 삽입(insert)하기 때문에 나머지 데이터셋에서 더 많은 컬럼이 정의되어 있더라도 결국은 데이터가 입력되지 않는다.

    이를 해결하는 방법은 의외로 간단한데 컬럼 수가 가변으로 입력되어야 하는 경우 데이터셋을 정의하는 XML에 테이블에 대한 DTD를 명확히 선언하면 된다.

    <!DOCTYPE dataset [
        <!ELEMENT dataset(TEST-TABLE*)>
    <!ATTLIST SR_CHANGE_RESULT column-1 CDATA #REQUIRED>
    <!ATTLIST SR_CHANGE_RESULT column-2 CDATA # REQUIRED >
    <!ATTLIST SR_CHANGE_RESULT column-3 CDATA #IMPLIED>
    <!ATTLIST SR_CHANGE_RESULT column-4 CDATA #IMPLIED>
    ]>
    <dataset>
    <TEST-TABLE column-1="data1" column-2="data2"/>
    <TEST-TABLE column-1="data1" column-2="data2" column-3="data3" column-4="data4"/>
    </dataset>


Designed by Tistory.