GenTestタスク

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

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

]]>

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

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

]]>

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

対象とする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
driverClassNameJDBCドライバクラス名です。java.sql.Driverの実装クラスでなければいけません。-YES
urlJDBC接続URLです。-YES
userJDBC接続ユーザーです。-YES
passwordJDBC接続パスワードです。-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
destDirJavaコードの出力先ディレクトリです。"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を指定します。

]]>

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

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

lib.ftlというファイルを作成し、これをtemplatePrimaryDir属性に指定するディレクトリに配置します。 lib.ftlには次のようにcopyrightの定義をします。 /* * Copyright 2008-2009 ... * All rights reserved. */ ]]> mytemplate/lib.ftlと配置する場合、タスクの定義は次のようになります。

]]>

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

]]>