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
関連の記事