cucumber-jvm を使用して、アプリケーションに統合テスト レイヤーを記述しています。私たちが見つけた課題の 1 つは、テストと Web アプリケーションの間でデータベースを管理することです。
典型的なシナリオは、シナリオの特定のステップでいくつかのエンティティを永続化し、次にユーザー インターフェイスでいくつかのアクションを実行して、さらに多くのエンティティを永続化することです。最後に、データベースをクリーンアップします。cucumber-jvm テストは 1 つの jvm で実行され、Web アプリケーションは別の jvm で実行されているため、(少なくとも私が認識している方法では) トランザクションを共有できないため、データベースを手動でクリーンアップする必要があります。
私が最初に考えたのは、cucumber-jvm テストと同じ JVM で組み込みのメモリ内データベース (HSQLDB) から実行される組み込み Tomcat サーバーを使用することでした。このようにして、単一のスプリング コンテナーを共有し、拡張することで、すべてのオブジェクトを取得できる単一のトランザクションを共有できる可能性があります。
私の最初のテストでは、Spring が 2 回ロードおよび構成されているように見えます。1 回目はテストが開始されて cucumber.xml が読み取られるとき、2 回目は組み込みの tomcat が開始されて Web アプリケーションがその applicationContext.xml を読み取るときです。これらは 2 つの完全に別のコンテナーにあるように見えます。これは、1 つのコンテナーで指定されたオブジェクトを別のコンテナーで解決しようとしても解決されないためです。構成を複製すると、同じ ID を持つ重複した Bean に関するエラーが発生します。
テスト アプリケーションと組み込みの tomcat の両方に同じコンテナーを使用するように Spring に指示する方法はありますか?
Spring 3.2.2.GA と Embedded Tomcat 7.0.39 (両方のライブラリの最新バージョン) を使用しています。
私はクレイジーですか?技術的な詳細を提供する必要がありますか? 間違った用語を使用している場合はお詫び申し上げます。
ありがとう
ps 私の問題に精通しているようで、私が試している解決策に代わる解決策を提案できる場合は、お知らせください。