Java DBUnitでテストするサンプル

JavaのDBUnitでテストするサンプルです。
確認環境 (Eclipse4.8、Java 8、DBUnit 2.6.0)

目次

サンプル DBUnitとは / DBUnitを取得する
DBのテーブルに登録するテストデータ
今回のプロジェクトのファイル
CSVをテーブルに登録してテストを行うコード
エラー/警告メッセージ

DBUnitとは

  • テスト実行時にテストしたいDBのテーブルのデータをdeleteし、CSV等で作成したテストデータをinsertしテストを行うことができます。
  • テストデータのファイルとしてXMLやエクセルも使用できます。
  • 以下は、DBUnitの公式サイトのリンクです。
    http://dbunit.sourceforge.net/

DBUnitを取得する

Mavenで取得

pom.xmlに追加します。

	<dependencies>
		<!-- https://mvnrepository.com/artifact/org.dbunit/dbunit -->
		<dependency>
			<groupId>org.dbunit</groupId>
			<artifactId>dbunit</artifactId>
			<version>2.6.0</version>
		</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>
		</dependency>
		<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>8.0.25</version>
		</dependency>
	</dependencies>

 

DBのテーブルに登録するテストデータ

テストデータのファイルの配置場所は、Eclipseがあるドライブにフォルダを作成し(dataフォルダ)syain.csvとtable-ordering.txtを配置しています。
syain.csvのsyainはテーブル名で、文字コードはUTF-8にします。

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

syain

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

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

 

今回のプロジェクトのファイル

今回のプロジェクトのファイルは以下のとおりです。

データベース(MySQL)を取得するコードは以下にあります。
Java DtoとDaoでDBを検索するサンプル

プロジェクトのフォルダ配下に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

githubにコードがあります。
https://github.com/ut23405/Java/tree/main/Test-DBUnit

 

CSVをテーブルに登録してテストを行うコード

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:3309/testphp","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の値を比較しています。

assertThatの構文は以下のとおりです。

assertThat(実際の値,is(期待の値))

 

エラー/警告メッセージ

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の設定がない場合に表示されます。

https://stackoverflow.com/questions/1266139/log4jwarn-no-appenders-could-be-found-for-logger-in-web-xml

関連の記事

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

△上に戻る