S2JDBC-Genの紹介 その2 − テストコードの自動生成

前回のエントリのつづきです。

テストコードの自動生成

S2JDBC-Genは、エンティティを使ってデータアクセスを実行するテストコードも自動生成できます。まぁ、あんまりたいしたものではないかも。ないよりあったほうがちょっと便利といったぐらいです。

build.xmlの定義(抜粋)

テストコードを生成するにはgen-testというS2JDBC-GenのAntタスクを使います。build.xmlの定義は次のようになります。

<gen-test
    classpathdir="build/classes"
    rootpackagename="example"
    classpathref="classpath"
/>

このタスクもgen-entityと同じようにいくつかプロパティを持っていますが、ほとんどがデフォルト値を持っているのであまり指定しなくてもうごきます。ここでは、classpathdirを指定しています。このプロパティには、エンティティのclassファイルを格納しているディレクトリを指定します。エンティティクラスの情報を読み取りたいので、クラスの場所が必要になってくるのです。Eclipseを使ってビルドしている場合だと、「Java Build Path」の「Output Folder」に相当します。rootpackagenameとclasspathrefについては前回のエントリを見てね。

生成されるコードの例

gen-testを実行するとエンティティごとにこんなコードが出力されます。

/**
 * Employeeのテストクラスです。
 * 
 * @author S2JDBC-Gen
 */
public class EmployeeTest extends S2TestCase {

    private JdbcManager jdbcManager;

    /**
     * 事前処理をします。
     * 
     * @throws Exception
     */
    @Override
    protected void setUp() throws Exception {
        super.setUp();
        include("s2jdbc.dicon");
    }

    /**
     * 識別子による取得をテストします。
     * 
     * @throws Exception
     */
    public void testFindById() throws Exception {
        jdbcManager.from(Employee.class).id(1).getSingleResult();
    }
}

テストケースは一件だけ。識別子(主キー)を使った検索をしているだけです。assertもない。
何をしたいかというと、エンティティの定義から自動生成されるSQLを実際にDBに投げてみて問題なく実行されることをテストの成功にしたいのです。テストが成功すれば、エンティティの定義は間違っていないし、エンティティに対応するテーブルもDBに存在することが確認できます。事前データが不要なのでこれくらいのテストが簡単なんですね。動作確認には十分かなと思っています。

更新系のテストは事前データとかデータの依存関係(外部キー)とかいろいろ考えなければいけないので今は自動生成は考えていません。いいアイデアがある人よろしく。