DbUnit는 손쉽게 JDBC 쿼리를 데이터베이스에 보내거나 그 결과 값을 가져올 수 있게 해주는 JUnit을 확장한 툴입니다. 데이터베이스 안의 값을 조작하는 것이 중요한 프로젝트에서 DbUnit의 효용성은 매우 크다고 할 수 있죠. DbUnit을 익히기 위해서는 우선 UbUnit의 웹사이트에 있는 이 문서를 참조하는 것이 좋을 것 같습니다.
그런데, 뭐 공부해서 나쁠 거야 없겠지만 처음 본 문서에서부터 난무(?)하는 알 수 없는 상수와 생소한 사용법은 조금 부담스러운게 사실이군요. 그래서 데이터베이스 테스트환경을 초기화할 때 사용할 수 있는 방법 한가지만 얘기해 볼까 합니다.
Ant의 build.xml 파일에 우선 다음과 같이 앤트의 확장 태스크를 정의해 줍니다.
<target name="define-tasks">
<taskdef name="dbunit" classname="org.dbunit.ant.DbUnitTask"
classpath=${dbunit-2.0.jar}"/>
</target>
필요한 jar파일의 이름으로 쓰인 변수(jar파일의 실제 위치와 이름을 값으로 가진)는 물론 따로 환경파일에 정의되어 있다고 가정합니다. 앞으로 나올 변수도 다 마찬가지입니다. 어떤 값이 필요한지는 변수명만 봐도 다 아실거에요. :-)
<target name="db-export" depends="define-tasks">
<dbunit driver="${database.driver_class}"
url="${database.url}"
userid="${database.username}"
password="${database.password}">
<export dest="db-export.xml" format="xml"/>
</dbunit>
</target>
자, 이 앤트 타겟은 이름 그대로 ${database.url}의 값 중에 포함되어 있을 어떤 테이블에 있는 값들을 모조리 db-export.xml 파일에 저장하는 기능을 합니다. 이렇게 생성된 파일을 어디에 써먹을까요?
<target name="db-load" depends="define-tasks">
<property name="operation" value="CLEAN_INSERT"/>
<property name="file" value="db-export.xml"/>
<dbunit driver="${database.driver_class}"
supportBatchStatement="false"
url="${database.url}"
userid="${database.username}"
password="${database.password}">
<operation type="${operation}" src="${file}" format="xml"/>
</dbunit>
</target>
이런식의 타겟을 만들어서 데이터베이스를 테스트하기 전에 데이터를 깨끗이 초기화하는데 사용할 수 있겠죠. 다음과 같은 방식으로요.
<target name="test-db" depends="db-load">
<junit>
... 테스트를 합니다! ...
</junit>
</target>
물론, DbUnit은 이런 목적으로만 만들어진 툴은 아닙니다. JUnit에서 TestCase를 상속하듯이DatabaseTestCase를 상속해서 실제 DB의 값과 원하는 결과 값을 완전하게(!) 비교하는 것이 주된 목적입니다. 다만 하이버네이트 등과 같은 ORM을 사용하는 프로젝트에서는 조금은 그 색이 바래보일 것 같습니다. 좀 더 상위 계층에서 객체의 몇몇 필드값을 비교해 보는 방식이 많이 쓰이기도 하구요.
참고 : https://appfuse.dev.java.net/
검색어 : dbunit, DBUNIT, DBUnit, DbUnit, 디비유니트, 디비유닛
[출처] [펌] DbUnit|작성자 짱가
'Programming > JAVA' 카테고리의 다른 글
[펌]JSTL(JSP Tag Library) 개요 (0) | 2008.10.16 |
---|---|
[펌]오라클 clob JDBC 예제 (0) | 2008.08.08 |
[펌] DBUnit의 사용 (0) | 2008.08.05 |
[REX] Commons-DbUtils (0) | 2008.08.05 |
[Exception전략] Java의 Exception 처리 최적화 (0) | 2008.08.05 |