2012/06/13

Groovyでdbunit

概要

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.

1 件のコメント:

  1. Excelでデータベースの取り込みやのデータ取得/更新するなら、ExcelDBToolをお勧めします。
    テーブルのデータをエクセルに取得、更新、削除することだけではなく、複数のSQLを実行して、結果を
    一括Excelの各シートに出力することもできます。

    http://www.superdbtool.com
    ベクターからもダウンロードできます。
    Oracle,SQL Server,DB2,Sybase,MySQL,Postgre,Sqlite対応。

    使い方動画:
    http://superdbtool.com/blog/basic-guide

    またExcelDBToolを使って、本番擬似ランダムテストデータを一括作成することは非常に簡単です。
    是非お試しください。
    作成できるダミーデータ種類(69種類):
    郵便番号, 都道府県, 企業名, 市区,町村,最寄駅,最寄駅ふりがな,路線,銀行コード, 銀行名, 銀行カタカナ, 支店コード, 支店名, 支店カタカナ,E-Mail, URL, 携帯, 苗字のみ, 氏名, 住所, 住所ふりがな,性別, 年齢, 血液型, 固定電話, 婚姻, ふりがな, 大学名,身長,体重固定値,国籍,国籍英語,国籍英語略,クレジットカード会社,クレジットカード番号,有効期限,IPアドレス,業種大分類,業種大分類名称,業種中分類,業種中分類名称,業種小分類,業種小分類名称,職種大分類,職種大分類名称,職種中分類,職種中分類名称,職種小分類,職種小分類名称,数値連番,整数・小数点数,英数混在,文字列+連番,文字列+全角連番全角漢字,ひらがな,全角カタカナ,半角カタカナ,全角英数,全角数値,全角英字,全半混在日付,時間,タイムスタンプ,特殊文字

    Oracle,SQL Server,DB2,Sybase,MySQL,Postgre,Sqlite対応。

    返信削除