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