5

統合テストに使用されるデータベースを作成するための SQL ステートメントを含むファイルが多数あるプロジェクトに参加しました。

これらのファイルを使用して、単体テスト用のデータベースを作成する方法を考えています (Java と Maven を使用)。

単体テストごとに HSQL インメモリ データベースを作成したり、Spring jdbc 組み込みデータベース機能を使用したりすることもできますが、テスト セットアップで実行する SQL ステートメントが多すぎるため、スケーラブルではありません。

したがって、Maven テスト フェーズの開始時に一時データベース (SQL ステートメントをロードする) を作成し、単体テストでこの一時データベースにアクセスしてさまざまな操作を実行し、Maven の最後に一時データベースを削除したいと思います。テスト段階。

テストフェーズの実行を可能にする sql-maven-plugin を見てきましたが、すべての単体テストで使用できる一時データベースを構成する方法がわかりません。接続するサーバーはなく、メモリ内データベースは複数の単体テストで機能しません (私は推測します)。

たとえば、JDBC ドライバーの URL を jdbc:hsqldb:file:/path/to/temporary/file のように指定しますが、maven で一意の一時ファイルを生成する方法がわかりません。

これを行う方法に関する提案、またはより良いアプローチがある場合は?

更新: target/db ディレクトリに作成されたファイルベースのデータベースを使用することにしました。テストを実行する前に maven clean プラグインを使用して target/db ディレクトリを削除し、maven sql プラグインを使用してスクリプトからデータベースを作成します。

4

2 に答える 2

3

この場合、derby-maven-pluginを作成しました。Maven Central から入手できるので、追加のリポジトリなどを追加する必要はありません。

次のように使用できます。

    <project ...>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.carlspring.maven</groupId>
                    <artifactId>derby-maven-plugin</artifactId>
                    <version>1.8</version>
                    <configuration>
                        <basedir>${project.build.directory}/derby</basedir>
                        <port>1527</port>
                    </configuration>
                    <executions>
                        <execution>
                            <id>start-derby</id>
                            <phase>pre-integration-test</phase>
                            <goals>
                                <goal>start</goal>
                            </goals>
                        </execution>
                        <execution>
                            <id>stop-derby</id>
                            <phase>post-integration-test</phase>
                            <goals>
                                <goal>stop</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </project>

詳細については、USAGEも確認してください。

于 2013-02-26T12:22:06.820 に答える
0
  1. ディスク上に H2 データベースを作成し、各テストでアクセスさせてみませんか? テストが並行して実行されたり、相互に作用したりしない限り、サーバーは必要ありません。

  2. さらに言えば、@Before でメモリ データベースを作成し、@After で削除するだけです。本当に遅すぎますか?

  3. pre-integration-test で H2 (または derby) サーバーを起動し、post-integration-test でシャットダウンできます。

  4. セッション状態を使用して組み込みデータベース サービスを追跡する Maven プラグインを作成できますが、それは (3) とほとんど同じです。

于 2013-02-06T14:23:12.500 に答える