DIConTestCase その2

DbUnitを使ってデータベースの精査をできるようにした。

テスト対象コンポーネント

テスト対象コンポーネントは次の通り。


package sample.dicon.component;

import java.sql.Connection;
import java.sql.SQLException;
import org.apache.commons.dbutils.QueryRunner;

import sample.dicon.constant.Result;
import sample.dicon.object.Address;
import sample.dicon.object.Return;
import sample.dicon.object.Sysdate;
import sample.dicon.object.impl.ReturnImpl;

/**
* 住所録を更新する。
* (セッター・インジェクション)
*/
public class UpdateAddressBook_Type2 {

private Connection conn = null;

private Sysdate sysdate = null;

private static QueryRunner qr = new QueryRunner();

public void setConnection(Connection conn) {
this.conn = conn;
}

public void setSysdate(Sysdate sysdate) {
this.sysdate = sysdate;
}

public Return execute(Address address) throws SQLException {
// 住所録を更新を更新。
Object[] params = { address.getName(), address.getAge(),
address.getSex().getValue(), address.getZipCode(),
address.getAddress(), address.getTel(),
sysdate.getNow().getTimestamp(), address.getId(),
address.getUpdateDate().getTimestamp() };
String update = "UPDATE ADDRESS_BOOK SET NAME=?, AGE=?, SEX=?, ZIP_CODE=?, ADDRESS=?, TEL=?, UPDATE_DATE=? WHERE ID=? AND UPDATE_DATE=?";
int count = qr.update(conn, update, params);

// 更新件数が0件の場合は失敗を返す。
if (count < 1) {
// 住所録の変更をロールバック
conn.rollback();

// 失敗を返す。
return new ReturnImpl(Result.FAILURE, "更新に失敗しました。");
}

// 住所録の変更をコミット。
conn.commit();

// 成功を返す。
return new ReturnImpl(Result.SUCCESS, "更新に成功しました。");
}

}

テストケースXML

テストケースのXMLファイルは次の通り。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dicontestcase SYSTEM "../../dtd/dicontestcase.dtd">
<dicontestcase>

  <!--
    テスト名を記述
    ※未定義の場合はファイル名(拡張子を除く)をテスト名とする
    -->
  <name>サンプルテスト その1</name>

  <!-- テストの説明 -->
  <description>
    正常系 : 住所録を更新する。
  </description>

  <!-- テストするコンポーネント -->
  <target>sample.dicon.component.UpdateAddressBook_Type2</target>
  <!--<target type="3">sample.dicon.component.UpdateAddressBook_Type3</target>-->

  <!-- 入力する値 -->
  <input>
    <!-- 実行するメソッド -->
    <execute name="execute">
      <arg type="sample.dicon.object.Address">
        <bean type="sample.dicon.object.impl.AddressImpl">
          <prop name="id" value="009"/>
          <prop name="name" value="猪川千恵"/>
          <prop name="age" value="25" type="java.lang.Integer"/>
          <prop name="sex">
            <const type="sample.dicon.constant.Sex" name="FEMALE"/>
          </prop>
          <prop name="zipCode" value="3339999"/>
          <prop name="address" value="▲▲県■■市■■9−6−3"/>
          <prop name="tel" value="00011112222"/>
          <prop name="updateDate" value="2004-07-15 12:13:12" type="sample.dicon.util.Date"/>
          <prop name="createDate" value="2004-06-10 20:10:30" type="sample.dicon.util.Date"/>
        </bean>
      </arg>
    </execute>

    <!-- コンポーネントの状態 -->
    <component>
      <inject name="connection" type="java.sql.Connection">
        <bean type="sample.dicon.object.impl.ConnectionImpl">
          <constructor>
            <arg type="java.lang.String" value="jdbc:oracle:thin:@//localhost:1521/myoracle"/>
            <arg type="java.lang.String" value="sugawara"/>
            <arg type="java.lang.String" value="sugawara"/>
          </constructor>
        </bean>
      </inject>
      <inject name="sysdate" type="sample.dicon.object.Sysdate">
        <bean type="sample.dicon.object.impl.SysdateImpl">
          <constructor>
            <arg type="java.lang.String" value="2004-10-20 12:24:30"/>
          </constructor>
        </bean>
      </inject>
    </component>

    <!-- データベースの状態 -->
    <database file="dataset/sample1-InputDataSet.xls"/>
    <!--<database file="dataset/sample1-InputDataSet.xml"/>-->
  </input>

  <!-- 期待する値 -->
  <expected>
    <!-- メソッドの戻り値 -->
    <return>
      <bean type="sample.dicon.object.impl.ReturnImpl">
        <constructor>
          <arg type="sample.dicon.constant.Result">
            <const type="sample.dicon.constant.Result" name="SUCCESS"/>
          </arg>
          <arg type="java.lang.String" value="更新に成功しました。"/>
        </constructor>
      </bean>
    </return>

    <!-- コンポーネントの状態 -->
    <component>
      <!-- connectionは精査しない -->
      <inject name="sysdate" type="sample.dicon.object.Sysdate">
        <bean type="sample.dicon.object.impl.SysdateImpl">
          <constructor>
            <arg type="java.lang.String" value="2004-10-20 12:24:30"/>
          </constructor>
        </bean>
      </inject>
    </component>

    <!-- データベースの状態 -->
    <database file="dataset/sample1-ExpectedDataSet.xls"/>
    <!--<database file="dataset/sample1-ExpectedDataSet.xml"/>-->
  </expected>

</dicontestcase>

Excelデータセット

Excelのデータセットは次のような感じ。

テスト結果

XMLTestRunnerの実行結果は次の通り。

その他

サンプルを含むEclipsのプロジェクト一式はここ