Maven
<dependency>
<groupId>org.dbunit</groupId>
<artifactId>dbunit</artifactId>
<version>2.6.0</version>
<scope>test</scope>
</dependency>
먼저 데이터베이스 테이블을 나타내는 XML 파일을 만들어야합니다.
user.xml
<?xml version="1.0" encoding="UTF-8"?>
<dataset>
<USER userid='1' first_name='Vinod' last_name='Kashyap' />
<USER userid='2' first_name='Dhwani' last_name='Kashyap' />
<USER userid='3' first_name='Asmi' last_name='Kashyap' />
</dataset>
- table: USER
- column: userid, first_name, last_name
user.xml
파일 위치는 루트 경로 에 둡니다.
package junitdbunit;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import java.io.FileInputStream;
import org.dbunit.DBTestCase;
import org.dbunit.PropertiesBasedJdbcDatabaseTester;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.xml.FlatXmlDataSetBuilder;
import org.dbunit.operation.DatabaseOperation;
import org.junit.Test;
public class DbUnit extends DBTestCase {
// database 연결 초기화
public DbUnit(String name) {
super(name);
System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_DRIVER_CLASS, "com.mysql.jdbc.Driver");
System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_CONNECTION_URL, "jdbc:mysql://localhost:3306/user");
System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_USERNAME, "root");
System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_PASSWORD, "");
}
/*
XML 파일을 읽고 데이터베이스에 필수 항목을 작성합니다.
여기에서는 IDataSet의 FlatXmlDataSet을 사용하고 있습니다.
*/
protected IDataSet getDataSet() throws Exception {
return new FlatXmlDataSetBuilder().build(new FileInputStream("user.xml"));
}
// 테스트하기 전에 데이터베이스를 초기 위치로 설정합니다.
protected DatabaseOperation getSetUpOperation() throws Exception {
return DatabaseOperation.REFRESH;
}
// 테스트 케이스 실행 후 모든 entry가 지워집니다.
protected DatabaseOperation getTearDownOperation() throws Exception {
return DatabaseOperation.NONE;
}
@Test
public void testById() {
int userId = 5;// get user id from database
assertThat(1, is(userId));
}
}
Best Practices
개발자 당 하나의 데이터베이스 인스턴스 사용
동일한 프로젝트에서 작업하는 여러 개발자가 데이터 손상을 방지하기 위해 자체 데이터베이스 인스턴스를 가져야합니다.
좋은 설정은 정리가 필요하지 않습니다.
앞선 테스트의 결과에 따라 테스트를 작성하지 않아야 합니다.
(순서에 관계없이 테스트는 성공해야 합니다.)
여러 개의 작은 데이터 세트 사용
전체 데이터베이스 데이터를 하나의 큰 데이터 세트에 넣는 대신 여러 개의 작은 덩어리로 나누십시오.
전체 테스트 클래스 또는 테스트 슈트에 대해 한 번 부실 데이터 설치를 수행하십시오.
여러 테스트에서 동일한 읽기 전용 데이터를 사용하는 경우 이 데이터를 전체 테스트 클래스 또는 테스트 슈트에 대해 한 번 초기화 할 수 있습니다.