dbunit 입문 (1) 기초 실례
4253 단어 Dbunit
팝에서.xml에 의존 추가
org.dbunit
dbunit
2.4.9
test
세 개의 패키지, dbunit, slf4j,commons-collections를 가져옵니다
2. dbunit 데이터 xml 파일 만들기
dbunit는 데이터베이스를 만들 때 우리의 데이터 xml 파일의 내용에 따라 만듭니다.
그래서 이 서류는 반드시 없어서는 안 된다.
형식은 다음과 같습니다.
3. dbunit의connection 만들기
dbunit는 데이터베이스에 연결된connection이 필요합니다. 이connection은 현재 항목이어야 합니다.
public class DbUtil {
public static Connection getCon(){
Connection con=null;
try {
con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL","admin","123");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return con;
}
@Test
public void testLoad() throws DatabaseUnitException{
IDatabaseConnection con=new DatabaseConnection(DbUtil.getCon());
System.out.println(con);
}
[color=red] note: SLF4J:Failed to load class "org.slf4j.impl.StaticLogger Binder"를 만날 수 있습니다.
해결 방법은 dependecy를 넣는 거예요.
org.slf4j
slf4j-simple
1.7.5
[/color] 4. xml 데이터 파일을 통해 DataSet 객체를 가져옵니다.
@Test
public void testLoad() throws DatabaseUnitException{
IDatabaseConnection con=new DatabaseConnection(DbUtil.getCon());
System.out.println(con);
/*
* FlatXmlDataSet
*
*/
IDataSet ds=new FlatXmlDataSet(new FlatXmlProducer(new InputSource(TestDbunit.class.getClassLoader().getResourceAsStream("t_user.xml"))));
System.out.println(ds);
}
5. DatabaseOperation의 excute를 실행하여 데이터베이스 작업을 수행합니다.
@Test
public void testLoad() throws DatabaseUnitException{
IDatabaseConnection con=new DatabaseConnection(DbUtil.getCon());
System.out.println(con);
/*
* FlatXmlDataSet
*
*/
IDataSet ds=new FlatXmlDataSet(new FlatXmlProducer(new InputSource(TestDbunit.class.getClassLoader().getResourceAsStream("t_user.xml"))));
System.out.println(ds);
//clean_insert , t_user.xml
try
{
DatabaseOperation.CLEAN_INSERT.execute(con, ds);
}
catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
이곳에서 실행하면 t사용자의 데이터는 형식에 따라 데이터베이스에 추가됩니다.
=========================================
여기서 가장 흔히 볼 수 있는 몇 가지 질문을 드리겠습니다.
[color=red]1.org.dbunit.dataset.NoSuchColumnException: T_USER.USERNAME - (Non-uppercase input column: username) in ColumnNameToIndexes cache map. Note that the map's column names are NOT case sensitive.[/color]
이런 문제는 xml 파일에 속하는 데이터와 데이터베이스에 속하는 형식이 대응하지 않습니다.
위의 tuser.사용자name은 xml표의username입니다.
데이터베이스에 있는 t사용자 테이블의column 이름은name입니다.
dbunit는 데이터베이스 테이블에서username을 찾을 수 없어서 잘못 보고했습니다.
[color=red]2. org.dbunit.dataset.NoSuchTableException: t_user
at org.dbunit.database.DatabaseDataSet.getTableMetaData(DatabaseDataSet.java:288)[/color]
데이터베이스에 이 테이블이 없습니다.
dbunit는 우리가 표를 작성하는 데 도움을 주지 않을 것이다.(t user.xml에 데이터베이스 테이블 이름과 열 이름만 지정되어 있고 상세한 데이터 형식 정보는 없음을 볼 수 있음)
dbunit를 사용하여 테스트를 진행하기 전에 데이터베이스에 수동으로 표를 만들어야 합니다.또는hibernate를 사용하여 만듭니다.
3. 엉망진창인 오류: 오늘 오후 내내 오류를 일으켰는데 dbunit의 데이터베이스 링크는 우리가 사용자 정의 jdbc의 getCon 방법을 통해 연결되었기 때문이다.Hibernate Spring과는 아무런 관련이 없습니다.이 점은 주의해야 한다.
4. 개인이 이 물건이 익숙하지 않다고 느낄 경우 실제 실행 데이터베이스와 함께 사용하지 않는 것이 좋다.본인은 어제 데이터베이스 데이터에 xml이 달린 테스트 데이터를 함께 잃어버렸습니다.TT