About

ドキュメント

Javadocs

プロジェクト文書

Built by Maven

概要

GenTestタスクは、テストクラスのコードを生成します。 現在のバージョンでは、SQLファイルに書かれたSQLを実行してSQLが正しいことを確認するテストコードを生成します。

GenTestタスクを利用するには、次のようにtaskdefタグとtypedefタグを使ってタスクとデータ型を定義する必要があります。

<taskdef name="gen" classname="org.seasar.doma.extension.gen.task.Gen" classpathref="classpath" loaderref="loader"/>
<typedef name="sqlTestConfig" classname="org.seasar.doma.extension.gen.task.SqlTestConfig" loaderref="loader"/>

taskdefのclasspathref属性には、Doma-Gen、FreeMarkerのjarファイルが参照されるように設定してください(Doma本体のjarファイルは不要です)。

定義したタスクとデータ型は次のように使用します。

<target name="genTest">
    <genTest
        dialectName="${dialectName}"
        driverClassName="${driverClassName}"
        url="${url}"
        user="${user}"
        password="${password}">
        <sqlTestConfig
            destdir="${javaDestDir}"
            testClassName="${sqlTestClassName}">
            <fileset dir="${sqlDestDir}">
                <include name="${sqlFilePattern}"/>
            </fileset>
        </sqlTestConfig>
    </genTest>
</target>

生成されるJavaコードは次のようになります。

public class SqlTest extends TestCase {
    ...
    public void test0() throws Exception {
        SqlFile sqlFile = repository.getSqlFile("META-INF/example/dao/AddressDao/selectById.sql", dialect);
        execute(sqlFile);
    }

    public void test1() throws Exception {
        SqlFile sqlFile = repository.getSqlFile("META-INF/example/dao/AddressDao/selectByIdAndVersion.sql", dialect);
        execute(sqlFile);
    }

    public void test2() throws Exception {
        SqlFile sqlFile = repository.getSqlFile("META-INF/example/dao/CategoryDao/selectById.sql", dialect);
        execute(sqlFile);
    }
    ...
}

対象とするSQLファイルの数だけテストメソッドが生成されます。

パラメータ

トップレベルパラメータ

トップレベルパラメータの定義は次の通りです。

属性 説明 デフォルト値 必須
dialectName 接続するRDBMSの方言名です。次のうちのどれかを指定できます。"h2"、"hsqldb"、"mysql"、"postgres"、"oracle"、"db2"、"mssql2008"、"mssql"。この名前に対応するクラスは、GenTestタスクを実行するクラスパスに通されている必要があります。 - dialectClassNameが指定されていない場合YES
dialectClassName 接続するRDBMSの方言クラス名です。org.seasar.doma.jdbc.dialect.Dialectの実装クラスでなければいけません。dialectNameの指定により利用できる組み込みの方言クラス以外を利用する場合に指定します。指定するクラスは、GenTestタスクを実行するクラスパスに通されている必要があります。 - dialectNameが指定されていない場合YES
driverClassName JDBCドライバクラス名です。java.sql.Driverの実装クラスでなければいけません。 - YES
url JDBC接続URLです。 - YES
user JDBC接続ユーザーです。 - YES
password JDBC接続パスワードです。 - YES
templateEncoding テンプレートファイルのエンコーディングです。 "UTF-8" NO
templatePrimaryDir テンプレートファイルを検索する際の優先ディレクトリです。独自テンプレートファイルを使用する場合に指定します。 - NO
globalFactoryClassName このタスクで使用されるインスタンスを生成するファクトリの完全修飾名です。org.seasar.doma.extension.gen.GlobalFactoryの実装クラスでなければいけません。このタスクの振る舞いをカスタマイズする場合に指定します。 "org.seasar.doma.extension.gen.GlobalFactory" NO

ネストした要素として指定されるパラメータ

SqlTestConfig

SQLのテストコードの生成に関する設定を表すデータ型です。

このデータ型を使用するとSQLのテストを行うJavaコードを生成できます。 生成されるテストコードは、JUnitとDomaに依存します。 このテストコードでは、SQLファイルに記述されたSQLをそのまま実行することでSQLが正しいことを確認します。 SQLの実行により変更されたデータはコミットせず、ロールバックします。

SqlTestConfigのパラメータ定義は次のとおりです。

属性 説明 デフォルト値 必須
generate "true"の場合、Javaコードを生成します。 "true" NO
destDir Javaコードの出力先ディレクトリです。 "src" NO
overwrite "true"の場合、Javaコードを上書きします。 "true" NO
testClassName 生成するテストクラスの名前です。 "example.SqlTest" NO
abstrct "true"の場合、テストクラスを抽象クラスとして生成します。継承によってデータベースアクセス処理をカスタマイズしたい場合に"true"を指定してください。この名前は、「abstract」ではなく「abstrct」であることに注意してください。 "false" NO

SqlTestConfigにネストした要素として指定されるパラメータ

FileSet

テスト対象のSQLファイルを指定するためにFileSetを使用します。 SQLファイルは次の条件を満たしていなければいけません。

  • 拡張子がsqlである。
  • META-INFディレクトリ以下に配置される。

使用例

独自のテンプレートファイルを使用する

Doma-Genのテンプレートは、配布ファイルのresources/templateディレクトリ以下にあります。 SQLをテストするクラスのテンプレートはsqlTest.ftlです。 これをコピーして、修正を加えるのが良いでしょう。 テンプレートの記述方法についてはFreeMarkerのドキュメントを参照してください。

修正したテンプレートファイルは、ファイル名を変更せずにtemplateFilePrimaryDir属性に指定するディレクトリに配置します。 mytemplateディレクトリに配置する場合、templatePrimaryDir属性にmytemplateを指定します。

<genTest
    dialectName="${dialectName}"
    driverClassName="${driverClassName}"
    url="${url}"
    user="${user}"
    password="${password}"
    templatePrimaryDir="mytemplate">
    <sqlTestConfig
        ...
    />
<genTest/>

テンプレートは、特定のデータモデルを参照します。 テンプレートとデータモデルクラスの対応付けを以下に示します。

テンプレート データモデルクラス 生成物
sqlTest.ftl org.seasar.doma.extension.gen.SqlTestDesc SQLテストクラスのJavaファイル

生成するJavaファイルに共通のヘッダーとしてコピーライトを含める

lib.ftlというファイルを作成し、これをtemplatePrimaryDir属性に指定するディレクトリに配置します。 lib.ftlには次のようにcopyrightの定義をします。

<#assign copyright>
/*
 * Copyright 2008-2009 ...
 * All rights reserved.
 */
</#assign>
mytemplate/lib.ftlと配置する場合、タスクの定義は次のようになります。

<genTest
    dialectName="${dialectName}"
    driverClassName="${driverClassName}"
    url="${url}"
    user="${user}"
    password="${password}"
    templatePrimaryDir="mytemplate">
    <sqlTestConfig
        ...
    />
<genTest/>

生成するJavaファイルにauthorを指定する

lib.ftlというファイルを作成し、これをtemplatePrimaryDir属性に指定するディレクトリに配置します。 lib.ftlには次のようにauthorの定義をします。

<#assign author="Nakamura">
mytemplate/lib.ftlと配置する場合、タスクの定義は次のようになります。

<genTest
    dialectName="${dialectName}"
    driverClassName="${driverClassName}"
    url="${url}"
    user="${user}"
    password="${password}"
    templatePrimaryDir="mytemplate">
    <sqlTestConfig
        ...
    />
<genTest/>