ALM/Test Automation

DBUnit 예제

Terry Cho 2007. 8. 27. 16:50

데이타베이스에 대한 테스트를 할 수 있는 DBUnit에 대한 샘플 코드.
DBUnit은 DataBaseConnection을 JDBCDriver,JNDI,DataSource등에서 얻어올 수 있다. 아래 예제는 JDBCDriver에서 얻어오는 예제

테스트 절차는 다음과 같다.
1) setUp메서드에서 데이타베이스를 테스트전으로 초기화 하고, (이때, XML파일을 이용해서 초기 데이타를 로딩할 수 있다.)
2) 테스트할 OBJECT를 수행한후
3) 테스트 기대 결과를XML에서 읽은후에
4) 데이타베이스의 기록 상태를 3)과 비교한다.

참고로 1)의 데이타는 테스트케이스에서 자동으로 XML 파일로Generation하거나 DTD를 생성할 수 있다.

참고 : http://www.onjava.com/pub/a/onjava/2004/01/21/dbunit.html

== EmpDAOTest .java ==
package bcho.simpledb.test;

import java.io.File;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;

import org.dbunit.Assertion;
import org.dbunit.DBTestCase;
import org.dbunit.PropertiesBasedJdbcDatabaseTester;
import org.dbunit.database.DatabaseConnection;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.ITable;
import org.dbunit.dataset.xml.FlatXmlDataSet;
import org.dbunit.operation.DatabaseOperation;

import bcho.simpledb.EmpDAO;
import bcho.simpledb.EmpDAOImpl;

public class EmpDAOTest extends DBTestCase
{
 final static String JDBC_DRIVER="org.gjt.mm.mysql.Driver";
 final static String JDBC_USERID="irteam";
 final static String JDBC_USERPASSWD="svnirteam";
 final static String JDBC_URL="jdbc:mysql://121.156.62.202:20001/db_svn_auth";
 //
 // Method Overloading
 //


 protected IDataSet getDataSet() throws Exception
 {
  return new FlatXmlDataSet(new FileInputStream("c:\\temp\\dataset.xml"));
 }
 
 public EmpDAOTest(String name){
  super(name);
     System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_DRIVER_CLASS, JDBC_DRIVER );
     System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_CONNECTION_URL, JDBC_URL );
     System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_USERNAME, JDBC_USERID );
     System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_PASSWORD, JDBC_USERPASSWD );

 }

    protected DatabaseOperation getSetUpOperation() throws Exception
    {
        return DatabaseOperation.DELETE_ALL;
    }
    protected DatabaseOperation getTearDownOperation() throws Exception
    {
        return DatabaseOperation.NONE;
    }

 //
 // Test Method
 //

 public void testInsertEmployee(){
  IDatabaseConnection conn = null;
  try{
   // execute Test Object
   EmpDAO empDao = new EmpDAOImpl();
   empDao.insertEmployee("bcho", "YoungIn Suji");
   
   // fetch Data After insert
   conn = getConnection();
   IDataSet databaseDataSet = conn.createDataSet();
   ITable actualTable = databaseDataSet.getTable("BCHO_EMP");
   
   // fetch Data from XML data sheet
   IDataSet expectedDataSet = new FlatXmlDataSet(new File("c:\\temp\\dataset.xml"));
   ITable expectedTable = expectedDataSet.getTable("BCHO_EMP");
   Assertion.assertEquals(expectedTable,actualTable);
  }catch(Exception e ){
   e.printStackTrace();
   fail("Test failed during testEmpTable");
  }finally{
   try{
    closeConnection(conn);
   }catch(Exception e){
    fail("Fail to close connection");
   }//try-catch
  }//finally
 
 }
}
=== dataset.xml ==
<?xml version='1.0' encoding='euc-kr'?>

<dataset>
 <BCHO_EMP name='bcho'
    address='Seoul Korea'/>
</dataset>
===

'ALM > Test Automation' 카테고리의 다른 글

Unit Testing WebLogic Workshop 8.1 Applications & JWebUnit  (0) 2007.08.27
JUnitEE vs Catcus  (0) 2007.08.27
단위 성능 테스트  (0) 2007.08.24
단위 테스트 방법  (0) 2007.08.24
테스트의 종류  (0) 2007.08.24