2009. 9. 2.

DBUnit 사용

JUnit을 기반으로 만들었기 때문에 JUnit과 사용법이 동일하다.
부가적으로 DB접근 기능 및 백업 추가 관련 API가 추가 되어있다.

TestCase를 상속한 테스트 클래스를 만들고 초기화(setUp) 및 테스트 종료(tearDown)시 호출되는 메소드에 DB백업 및 복원 기능을 추가해 넣으면 된다.

백업 및 복원은 일반적으로 테스트 케이스에 의해 값이 변경(Update)되거나 삭제(Delete)되는 경우에 실시한다. 선택(Select)의 경우에는 먼저 setUp메소드에서 테스트 데이터를 입력하고 테스트를 실시한 후 tearDown에서 입력한 데이터를 삭제한다.

간단한 예제를 들면 다음과 같다.
먼저 setUp을 보자

protected void setUp() {
IDatabaseConnection connection =null;
try{
super.setUp();
Connection conn=getConnection();
connection
=new DatabaseConnection(conn);

//현재상태 백업
QueryDataSet partialDataSet = new QueryDataSet(connection);
partialDataSet.addTable("ACCEPT_ORDER");
file=File.createTempFile("accept",".xml");
FlatXmlDataSet.write(partialDataSet,
new FileOutputStream(file));

//테스트데이터 입력
IDataSet dataSet
= new FlatXmlDataSet( new FileInputStream("accept_order_test_data.xml"));
DatabaseOperation.CLEAN_INSERT.execute(connection,dataSet);

}catch(Exception e){
e.printStackTrace();
}finally{
try{
if(connection!=null) connection.close();
}catch(SQLException e){}
}
}


위의 코드 중 테스트를 위한 입력 데이터의 예는 다음과 같다.




c_num="1000"
p_num="501"
dc_rate="5"
option_price="30"
employee="101"
accept_date="2004-01-01" />



TearDown의 경우는

protected void tearDown() throws Exception{

IDatabaseConnection connection =null;
try{
super.tearDown();
Connection conn=getConnection();
connection
=new DatabaseConnection(conn);

IDataSet dataSet
= new FlatXmlDataSet(file);
DatabaseOperation.CLEAN_INSERT.execute(connection,dataSet);

}catch(Exception e){
e.printStackTrace();
}finally{
try{
if(connection!=null) connection.close();
}catch(SQLException e){}
}

}


dbunit api 내에는 ant를 이용한 테이블 백업 유틸리티가 제공되고 있는데 이를 사용하는 예는 아래와 같다.


classpath="${basedir}/WebContent/WEB-INF/lib/dbunit-2.4.5.jar" >








driver="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@192.168.0.5:1521:xxx"
userid="user"
password="pass"
schema="schema">






위 코드를 ant를 이용하여 실행하면
taskdef A class needed by class org.dbunit.ant.DbUnitTask cannot be found: org.slf4j.LoggerFactory
와 같은 에러가 발생할 수도 있다.
아래의 유알엘을 참고하여 해결한다.
http://j2eeframeworks.blogspot.com/2008/10/problems-in-integrating-ant-with-dbunit.html
간단하게 설명하면 slf4j-simple-1.5.3.jar와 slf4j-api-1.5.3.jar라는 두 라이브러리를 클래스 패스 경로에 포함하면 해결된다. http://www.slf4j.org/download.html 에서 해당 파일을 다운받을 수 있다. ant의 클래스 패스경로에 두 파일을 추가하기 위해 Window--> Preferences --> Ant --> Runtime --> 클래스패스탭 으로 이동하여 위 두 자 파일을 추가한다.

slf4j-simple-1.5.3.jar and slf4j-api-1.5.3.jar

db의 내용을 엑셀파일로 익스포트하는 법

public class XLSExporter {

public static void main(String[] args) throws Exception {

DatabaseConnection con = new DatabaseConnection(ConnectionManager
.getConnection());
IDataSet dataset = con.createDataSet();
XlsDataSet.write(dataset, new FileOutputStream("export.xls"));

}
}


참고 URL
http://j2eeframeworks.blogspot.com/2008/10/problems-in-integrating-ant-with-dbunit.html
http://www.techscore.com/tech/Others/DBUnit/index.html
http://www.thinkit.co.jp/article/32/3/3.html
http://muimi.com/j/test/dbunit/

댓글 없음: