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 |
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 |
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 |
テスト対象のSQLファイルを指定するためにFileSetを使用します。 SQLファイルは次の条件を満たしていなければいけません。
Doma-Genのテンプレートは、配布ファイルのresources/templateディレクトリ以下にあります。 SQLをテストするクラスのテンプレートはsqlTest.ftlです。 これをコピーして、修正を加えるのが良いでしょう。 テンプレートの記述方法についてはFreeMarkerのドキュメントを参照してください。
修正したテンプレートファイルは、ファイル名を変更せずにtemplateFilePrimaryDir属性に指定するディレクトリに配置します。 mytemplateディレクトリに配置する場合、templatePrimaryDir属性にmytemplateを指定します。
テンプレートは、特定のデータモデルを参照します。 テンプレートとデータモデルクラスの対応付けを以下に示します。
テンプレート | データモデルクラス | 生成物 |
---|---|---|
sqlTest.ftl | org.seasar.doma.extension.gen.SqlTestDesc | SQLテストクラスのJavaファイル |
lib.ftlというファイルを作成し、これをtemplatePrimaryDir属性に指定するディレクトリに配置します。 lib.ftlには次のようにcopyrightの定義をします。 mytemplate/lib.ftlと配置する場合、タスクの定義は次のようになります。
lib.ftlというファイルを作成し、これをtemplatePrimaryDir属性に指定するディレクトリに配置します。 lib.ftlには次のようにauthorの定義をします。 mytemplate/lib.ftlと配置する場合、タスクの定義は次のようになります。