DBUnitとは
DBUnitとはテスト実行前にデータベースの内容を指定の内容に初期化したり、テスト実行後にデータベースの内容が指定の内容通りになっているかを検査するツールである。
Javaベースのツールではあるが、データベースをテスト内容に組み込む際に他の言語でも併用すれば便利である。
データベースの内容はXMLファイルが基本であるが、EXCEL形式やCSV形式でも記述可能である。
公式サイト:http://dbunit.sourceforge.net/
クイックスタート
DBUnitはMAVENでダウンロードすることもjarファイルをダウンロードして組み込むことも可能。
クイックスタートではjarファイルをダウンロードしてテスト実行する。
データベースはMySQLを使用し、MySQLのインストールと管理者ユーザー作成は既に完了しているものとする。
- DBUnitをインストールする
- DBUnitのjarファイルのダウンロードパスを確認する
- DBUnitをダウンロードする
curl -s -O https://search.maven.org/remotecontent?filepath=org/dbunit/dbunit/2.6.0/dbunit-2.6.0.jar
- MySQL JDBCをインストールする
- MySQL JDBCのjarファイルのダウンロードパスを確認する(Platform Independent版)
- MySQL JDBCをダウンロードする
curl -L -s -O https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.17.tar.gz
- 展開する
tar xvzf mysql-connector-java-8.0.17.tar.gz
- jarファイルのみを取り出す
mv mysql-connector-java-8.0.17/mysql-connector-java-8.0.17.jar .
- その他のファイルは削除する
rm -f mysql-connector-java-8.0.17.tar.gz
rm -rf mysql-connector-java-8.0.17
- MySQLをテスト用に初期化する
※XXX部分は環境によって合わせる
TEST_MYSQL_HOST="XXX"
TEST_MYSQL_USER="XXX"
TEST_MYSQL_PASS="XXX"
mysql --ssl -h $TEST_MYSQL_HOST -u $TEST_MYSQL_USER -p${TEST_MYSQL_PASS} -e "create database testdb DEFAULT CHARACTER SET utf8;"
mysql --ssl -h $TEST_MYSQL_HOST -u $TEST_MYSQL_USER -p${TEST_MYSQL_PASS} -e "create table testdb.test_table (id int not null AUTO_INCREMENT,name varchar(10) not null,num int,primary key (id));"
mysql --ssl -h $TEST_MYSQL_HOST -u $TEST_MYSQL_USER -p${TEST_MYSQL_PASS} -e "create user test_user identified by 'password1234';"
mysql --ssl -h $TEST_MYSQL_HOST -u $TEST_MYSQL_USER -p${TEST_MYSQL_PASS} -e "grant ALL on testdb.test_table to test_user;" -
javaファイルを作成する
import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;;
import java.util.Properties;
import org.dbunit.database.DatabaseConnection;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.xml.FlatXmlDataSetBuilder;
import org.dbunit.operation.DatabaseOperation;
public class DBInit
{
public static void main(String[] args) throws Exception
{
if(args.length==0)
{
System.out.println("No Argment. Please Input Data File.");
System.exit(1);
}
String hostname = "127.0.0.1";
String database = "testdb";
String user = "test_user";
String password = "password1234";
Properties properties = new Properties();
properties.setProperty("user",user);
properties.setProperty("password",password);
properties.setProperty("ssl","true");
IDatabaseConnection connection = new DatabaseConnection(DriverManager.getConnection("jdbc:mysql://"+hostname+"/"+database,properties));
IDataSet dataset = new FlatXmlDataSetBuilder().build(new File(args[0]));
DatabaseOperation.DELETE_ALL.execute(connection, dataset);
DatabaseOperation.INSERT.execute(connection, dataset);
}
} - javaファイルをコンパイルする
javac --class-path ./dbunit-2.6.0.jar:./mysql-connector-java-8.0.17.jar DBInit.java
- テスト用のデータファイルを用意する
vi test.xml
以下を張り付けて保存する<dataset>
<test_table id="100001" name="qwert" num="100"/>
<test_table id="100002" name="asdfg" num="101"/>
<test_table id="100003" name="zxcvb" num="102"/>
</dataset> - コンパイルする
javac --class-path ./dbunit-2.6.0.jar:./mysql-connector-java-8.0.17.jar DBInit.java
- 実行する
java --class-path ./dbunit-2.6.0.jar:./mysql-connector-java-8.0.17.jar:./slf4j-api-1.7.28.jar:./ DBInit test.xml
- データベースのデータを確認する