Intellij IDEAでJava Servlet3.0の開発 – Tutorial DBUnit

Intellij IDEAでJava Servlet3.0の開発 – Tutorial DBUnitIntellij IDEAはべつに関係ないんだけど、前の投稿(Intellij IDEAでJava Servlet3.0の開発 - DBUnitのテストコード)だと、用意しとくXMLにデータベースの全件が上書きされて消えてしまうので(; ̄ー ̄A
格納してるデータのバックアップをとってからテストするためのチュートリアルコードも調べてみました。
バージョンによって書き方がかわってるらしくバージョン2.4.7以降は、だいぶすっきり書けます。

環境:
DBUnit バージョン 2.4.7
ファイル名:UserBeanDBTestCase.java

package test.com.learnJava.bean; 

import org.dbunit.DBTestCase;
import org.dbunit.PropertiesBasedJdbcDatabaseTester;
import org.dbunit.database.QueryDataSet;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.xml.FlatXmlDataSet;
import org.dbunit.dataset.xml.FlatXmlDataSetBuilder;
import org.dbunit.operation.DatabaseOperation;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;

/**
 * UserBeanDBTestCase Tester.
 *
 * @author Coronet Internet Service Twitter<@CoroIntSvs>
 * @version 1.0
 * @since 12.9.2013
 */

public class UserBeanDBTestCase extends DBTestCase {
    // バックアップを入れるファイル
    private File file;

    /**
     * コンストラクタ
     * データベース情報を環境にセット
     */
    public UserFormBeanDbTest()
    {
        super();
        /* JDBCドライバの読み込み */
        // MySQL
        System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_DRIVER_CLASS, "com.mysql.jdbc.Driver" );
        // PostgreSQL
        // System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_DRIVER_CLASS, "org.postgresql.Driver" );
        // Oracle
        // System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_DRIVER_CLASS, "oracle.jdbc.driver.OracleDriver" );

/* データベースのコネクションURL */
// MySQL
System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_CONNECTION_URL, "jdbc:mysql://localhost:3306/dbname" );
// PostgreSQL
// System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_CONNECTION_URL, "jdbc:postgresql://localhost:5432/dbname" );
// Oracle
// System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_CONNECTION_URL, "jdbc:oracle:thin:@localhost:1521:dbname" );
System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_USERNAME, "db_user" );
System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_PASSWORD, "db_pass" );    }

    /**
     * データベースのバックアップとテストデータのセット
     * テスト時に最初に実行するDBTestCaseに依存するメソッド
     * {@inheritDoc}
     */
    protected IDataSet getDataSet() throws Exception
    {
        QueryDataSet partialDataSet = new QueryDataSet(getConnection());
        partialDataSet.addTable("user"); //データベーステーブルをセット
        partialDataSet.addTable("group");
        this.file = File.createTempFile("backUpDb", ".xml"); //バックアップ用に出力するXML
        System.out.println(this.file);
        FileOutputStream fileOutputStream = new FileOutputStream(this.file);
        FlatXmlDataSet.write(partialDataSet, fileOutputStream);
        fileOutputStream.flush();
        fileOutputStream.close();
        // テスト用のXMLデータ(dataset.xml)をデータベースに保存
        return new FlatXmlDataSetBuilder().build(new FileInputStream("dataset.xml"));
    }

    /**
     * テストコード
     * ユーザグループ Android に含まれるユーザ数が正しいかのテストの例
     */
    public void testGetUserLength() throws Exception{
        UserBean userBean = new UserBean();
        userBean.setUserGroup("Android");
        userBean.selectUserList();
        ArrayList<UserBean> userList = userBean.getUserList();
        assertEquals(3, userList.size());
    }

    /**
     * テストが終わったら保存のデータにリストア
     * {@inheritDoc}
     */
    protected void tearDown() throws Exception{
        IDataSet dataSet = new  FlatXmlDataSetBuilder().build(this.file);
        DatabaseOperation.CLEAN_INSERT.execute(getConnection(),dataSet);
     }
}

 参考サイトさま:

誤字などみつかったらお知らせください!
以上ご参考までで。

About the author
  • コメントを残す