DbUnitメモ


DbUnit?メモ

DbUnit?とは・・・http://dbunit.sourceforge.net/

サンプルソース

適当に参考にしてください

HelloDbUnit?.java

import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;

import org.dbunit.Assertion;
import org.dbunit.DatabaseTestCase;
import org.dbunit.database.DatabaseConnection;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.ITable;
import org.dbunit.dataset.SortedTable;
import org.dbunit.dataset.excel.XlsDataSet;
import org.dbunit.dataset.xml.FlatXmlDataSet;
import org.dbunit.operation.DatabaseOperation;

/**
 * このテストで使用するテーブル
 * 
 * create table test (
 *     id number(2),
 *     name varchar(20)
 * );
 * create table test2 (
 *     id number(2),
 *     name varchar(20)
 * );
 * 
 */
public class HelloDbUnit extends DatabaseTestCase {

    /**
     * コネクションの取得(必須)
     */
    protected IDatabaseConnection getConnection() throws Exception {
        String JDBC_NAME = "oracle.jdbc.driver.OracleDriver";
        String URL = "jdbc:oracle:thin:@localhost:1521:testdb";
        String USER_NAME = "moke";
        String PASSWORD = "moke";
        Class.forName(JDBC_NAME);
        Connection jdbcConnection =
            DriverManager.getConnection(URL, USER_NAME, PASSWORD);
        return new DatabaseConnection(jdbcConnection);
    }

    /**
     * 初期データ挿入(必須)
     */
    protected IDataSet getDataSet() throws Exception {
        return new FlatXmlDataSet(
            new FileInputStream("src\\test\\database.xml"));
    }

    /**
     * XMLバージョン1
     * 初期化で入れたデータを表示するだけ
     * @throws Exception
     */
    public void gtest001() throws Exception {
        Connection con = getConnection().getConnection();
        ResultSet rs = con.createStatement().executeQuery("select * from TEST");
        while (rs.next()) {
            System.out.println(
                rs.getString("ID") + ", " + rs.getString("NAME"));
        }
    }

    /**
     * XMLバージョン2
     * 初期化のデータを新しいデータで上書きしてからテスト
     * @throws Exception
     */
    public void gtest002() throws Exception {
        // 新しくデータを入れる
        IDataSet dataSet =
            new FlatXmlDataSet(new FileInputStream("src\\test\\database2.xml"));
        DatabaseOperation.CLEAN_INSERT.execute(getConnection(), dataSet);

        Connection con = getConnection().getConnection();
        ResultSet rs = con.createStatement().executeQuery("select * from TEST");
        while (rs.next()) {
            System.out.println(
                rs.getString("ID") + ", " + rs.getString("NAME"));
        }

        // DBから実際のデータを取得
        IDataSet databaseDataSet = getConnection().createDataSet();
        ITable actualTable = databaseDataSet.getTable("TEST");
        // XMLファイルから期待値を取得
        IDataSet expectedDataSet =
            new FlatXmlDataSet(new FileInputStream("expect.xml"));
        // [NULL] を null に置き換え
        ReplacementDataSet expectedDSReplaced =
            new ReplacementDataSet(expectedDataSet);
        expectedDSReplaced.addReplacementObject("[NULL]", null);
        // 余計なカラムをマッチングさせないようにする
        ITable expectedTable = expectedDSReplaced.getTable("TEST");
        actualTable =
            new CompositeTable(expectedTable.getTableMetaData(), actualTable);

        // 順番をそろえてマッチング
        Assertion.assertEquals(
            new SortedTable(expectedTable),
            new SortedTable(actualTable, expectedTable.getTableMetaData()));
    }

    /**
     * EXCELバージョン!!
     * @throws Exception
     */
    public void gtest003() throws Exception {
        // 新しくデータを入れる
        IDataSet dataSet =
            new XlsDataSet(new FileInputStream("src\\test\\database.xls"));
        DatabaseOperation.CLEAN_INSERT.execute(getConnection(), dataSet);

        Connection con = getConnection().getConnection();
        ResultSet rs = con.createStatement().executeQuery("select * from TEST");
        while (rs.next()) {
            System.out.println(
                "[TEST] " + rs.getString("ID") + ", " + rs.getString("NAME"));
        }
        rs = con.createStatement().executeQuery("select * from TEST2");
        while (rs.next()) {
            System.out.println(
                "[TEST2] "
                    + rs.getString("ID")
                    + ", "
                    + rs.getString("NAME")
                    + " : "
                    + (rs.getString("NAME") == null));
        }
    }

    /**
     * XMLバージョン3
     * 初期化のデータを新しいデータで上書きしてからテスト
     * 実行結果をXMLでマッチング
     * @throws Exception
     */
    public void test004() throws Exception {
        // 新しくデータを入れる
        IDataSet dataSet =
            new FlatXmlDataSet(new FileInputStream("src\\test\\database2.xml"));
        DatabaseOperation.CLEAN_INSERT.execute(getConnection(), dataSet);

        // Fetch database data after executing your code
        IDataSet databaseDataSet = getConnection().createDataSet();
        ITable actualTable = databaseDataSet.getTable("TEST");
        // Load expected data from an XML dataset
        IDataSet expectedDataSet =
            new FlatXmlDataSet(new FileInputStream("src\\test\\database2.xml"));
        ITable expectedTable = expectedDataSet.getTable("TEST");

        // Assert actual database table match expected table
        Assertion.assertEquals(
            new SortedTable(expectedTable),
            new SortedTable(actualTable, expectedTable.getTableMetaData()));
    }

}

database.xml

<?xml version="1.0" encoding="UTF-8"?>
<dataset>
   <TEST id="1" name="てすとん" /> 
   <TEST id="2" name="どうよ?" /> 
   <TEST id="3" name="もけもけ" /> 
</dataset>

※1行目にないカラムは2行目以降セットしてくれない?

<?xml version="1.0" encoding="UTF-8"?>
<dataset>
   <!-- これだとダメっぽい・・・ -->
   <!--  id=2,3 の name が格納されない・・・ -->
   <TEST id="1" />  
   <TEST id="2" name="どうよ?" /> 
   <TEST id="3" name="もけもけ" /> 
</dataset>

Menu

Linux

サーバ構築

Windows

Java

Program

 

最新の20件

2008-04-02 2008-03-11 2008-01-28 2008-01-21 2007-11-27 2007-09-19 2007-06-07 2007-04-11 2007-04-06 2007-03-22 2006-12-20 2006-12-05 2006-12-04 2006-10-27 2006-09-22 2006-07-03 2006-05-16