概要
DBUnitを簡単に使う方法を探していたら、以下のページを見つけました。
http://d.hatena.ne.jp/kiy0taka/20100109/1262967959
上記はGrabを使い、必要なライブラリをロードしておりましたが、同じように試してみたけどうまくいかず。。。
何かたんねーんだろう。。。
そこで普通に必要ライブラリを入手し試してみました。
下準備
以下のライブラリを入手し、クラスパスに追加します。
・dbunit-2.4.8.jar
http://www.dbunit.org/
・slf4j-api-1.6.6.jar
・slf4j-jcl-1.6.6.jar
http://www.slf4j.org/
・mysql-connector-java-5.1.20-bin.jar
http://dev.mysql.com/downloads/connector/j/
※mysqlで試しました。
・commons-logging-1.1.1.jar
http://commons.apache.org/logging/
実装例
ほぼ参考にさせて頂いたサイトそのままですが。。。
こんな感じに実装しました。
package jp.co.indoor.test;
import org.dbunit.Assertion;
import org.dbunit.JdbcDatabaseTester;
import org.dbunit.dataset.xml.FlatXmlDataSet;
import groovy.sql.Sql;
import groovy.util.GroovyTestCase;
import groovy.xml.StreamingMarkupBuilder;
class DbUnitSampleTest extends GroovyTestCase {
static {
Sql.newInstance('jdbc:mysql://localhost:3306/test', '', '', 'com.mysql.jdbc.Driver').executeUpdate('delete from emp')
// .execute(
// """
// CREATE TABLE emp (
// empno INTEGER PRIMARY KEY,
// ename VARCHAR(10),
// job VARCHAR(9)
// );
// """)
}
JdbcDatabaseTester tester
void setUp() {
tester = new JdbcDatabaseTester('com.mysql.jdbc.Driver', 'jdbc:mysql://localhost:3306/test', '', '')
}
void test() {
tester.dataSet = dataSet {
emp empno:7369, ename:'SMITH', job:'CLERK'
emp empno:7499, ename:'ALLEN', job:'SALESMAN'
emp empno:7521, ename:'WARD', job:'SALESMAN'
}
tester.onSetup()
assert 1 == Sql.newInstance('jdbc:mysql://localhost:3306/test', '', '', 'com.mysql.jdbc.Driver').executeUpdate('delete from emp where empno = 7499')
Assertion.assertEquals dataSet {
emp empno:7369, ename:'SMITH', job:'CLERK'
emp empno:7521, ename:'WARD', job:'SALESMAN'
}, tester.connection.createDataSet()
}
def dataSet(c) {
new FlatXmlDataSet(new StringReader(new StreamingMarkupBuilder().bind{dataset c}.toString()))
}
}
動かしたところ、普通に動きました。あっさりと。
なんか変なログは出ていますが。。。
6 13, 2012 12:35:18 午前 org.slf4j.impl.JCLLoggerAdapter warn
警告: Potential problem found: The configured data type factory 'class org.dbunit.dataset.datatype.DefaultDataTypeFactory' might cause problems with the current database 'MySQL' (e.g. some datatypes may not be supported properly). In rare cases you might see this message because the list of supported database products is incomplete (list=[derby]). If so please request a java-class update via the forums.If you are using your own IDataTypeFactory extending DefaultDataTypeFactory, ensure that you override getValidDbProducts() to specify the supported database products.
6 13, 2012 12:35:18 午前 org.slf4j.impl.JCLLoggerAdapter warn
警告: Potential problem found: The configured data type factory 'class org.dbunit.dataset.datatype.DefaultDataTypeFactory' might cause problems with the current database 'MySQL' (e.g. some datatypes may not be supported properly). In rare cases you might see this message because the list of supported database products is incomplete (list=[derby]). If so please request a java-class update via the forums.If you are using your own IDataTypeFactory extending DefaultDataTypeFactory, ensure that you override getValidDbProducts() to specify the supported database products.