Java DBUnitを操作するサンプル

JavaのDBUnitを操作するサンプルです。
CSVの値をDBに登録してテストを行います。

確認環境
・Eclipse4.8
・Java 8
・DBUnit 2.6.0

目次

1.DBUnit

  • CSV、XML、エクセルの値をDBに登録できます。
  • 以下は、DBUnitの公式サイトのリンクです。
    http://dbunit.sourceforge.net/

2.jarファイルの取得

Mavenでjarを取得する設定です。

pom.xmlに2~19行目を追加します。1,20行目がない場合は1,20行目も追加します。
7行目のscopeタグにはさまれたtestは、テストコードのときのみ有効になることを意味します。

<dependencies>
<!-- https://mvnrepository.com/artifact/org.dbunit/dbunit -->
<dependency>
    <groupId>org.dbunit</groupId>
    <artifactId>dbunit</artifactId>
    <version>2.6.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.2</version>
</dependency>
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>
</dependencies>

上記の他に、MySQLのドライバをクラスパスに追加します。
mysql-connector-java-8.0.12.jar

 

3.DBに登録するファイルの場所と内容

DBに登録するファイルの場所と内容です。

場所は、ドライブ直下のdataフォルダにsyain.csvとtable-ordering.txtを配置しています。
syain.csvのsyainはテーブル名にします。

table-ordering.txtファイルには、上記配置したcsvのファイル名を記述します。

syain

syain.csvファイルの中身はテーブルに登録するデータを記述します。
1行目は、テーブルの列名です。
2~4行目は、テーブルの値です。

id,name,romaji
1,"鈴木","suzuki"
2,"田中","tanaka"
3,"佐藤","sato"

 

4.CSVでDBに値を設定してテストを行うコード

CSVでDBに値を設定してテストを行います。

package test1;
import static org.junit.Assert.*;
import org.junit.Test;
import static org.hamcrest.CoreMatchers.*;
import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.List;
import org.dbunit.DatabaseUnitException;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.csv.CsvDataSet;
import org.dbunit.ext.mysql.MySqlConnection;
import org.dbunit.operation.DatabaseOperation;
import org.junit.Before;
import org.apache.log4j.PropertyConfigurator;

public class Test1Test {
    
    @Before
    public void testBefore() throws Exception {
		PropertyConfigurator.configure("log4j.properties");

		MySqlConnection MySqlconn = null;
		
		try(Connection conn = DriverManager.getConnection
		("jdbc:mysql://localhost:3306/testphp?serverTimezone=JST","root","")){
			
			MySqlconn = new MySqlConnection(conn,"testphp");
	         
	        IDataSet dataset = new CsvDataSet(new File("/data"));
	        DatabaseOperation.CLEAN_INSERT.execute(MySqlconn, dataset);
	        
	    } catch (SQLException e) {
	        e.printStackTrace();
	    } catch (DatabaseUnitException e) {
	        e.printStackTrace();
	    } finally {
	        if(MySqlconn != null){
	            try {
	            	MySqlconn.close();
	            } catch (SQLException e) {
	                e.printStackTrace();
	            }
	        }
	    }
    }
	@Test
	public void test() {
    	SyainDao syainDao = new SyainDao();
    	List<SyainDto> sd = syainDao.findAll();
    	assertThat(sd.get(1).getName(),is("田中")); //成功
	}
}

26,27,29行目は、MySQLのtestphpというデータベースに接続しています。
31行目は、ファイルを読み込んでいます。
32行目は、一旦データを削除してファイルの値を登録しています。
52行目は、取得したDBの値を比較しています。

データベースを取得するコードは以下で行っています。
Java DaoとDtoでDBを検索するサンプル

 

5.エラー/警告メッセージ

警告1

log4j:WARN No appenders could be found for logger (org.dbunit.util.SQLHelper).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

log4jのappenderの設定がないと警告が表示されます。
プロジェクトのフォルダ配下にlog4j.propertiesを配置し以下を記述します。

log4j.rootLogger=WARN, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.conversionPattern=%5p [%t] (%F:%L) - %m%n

http://logging.apache.org/log4j/1.2/faq.html#noconfig
https://stackoverflow.com/questions/1266139/log4jwarn-no-appenders-could-be-found-for-logger-in-web-xml

関連の記事

Java JUnit4のテストのサンプル
Java Apache POIでエクセルを操作するサンプル

△上に戻る