2016-12-05 7 views
0

JUnitテストの実行時に自動的に実行され、テストが完了すると停止する必要があります。私はmavenのmongoDBプラグインを使用しようとしましたが、mongoDBは実行されていないようです。どんな助け?JUnitテストの実行時にMongoDBを実行する際の問題

+2

unittestは、(JUnitフレームワークで行われたアプリケーションテストだけでない限り)通信を実際のデータベースにモックアウトする必要があります。 –

+0

@TimothyTruckleあなたがmongoドライバを嘲笑することについて話しているなら、これをしないでください。ここでは、そのような行為をしない理由に関する記事があります。https://jaxenter.com/testing-the-database-layer-119366.html – tddmonkey

+0

articles引数は、データベース*で動作をテストするときに有効です。データベース外のビジネスロジックを(* unit- *)テストするときは、実際にはデータベースアクセスを疑似化する必要があります。 –

答えて

0

@BeforeAll/@Before句を使用して起動し、後で停止してすべてをクリーンアップすることができます。 http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-mongo-embedded

は、そうでなければ、あなた自身の組み込みモンゴDBをセットアップするのGithub上のドキュメントを使用することができます。

春ブーツは、内蔵の自動設定がそうあなただけembed.mongoし、依存関係を追加する必要があります。

0

単体テストの場合は、データベース統合のモックアップを試みる必要があります。しかし、私はこれを一度に処理しなければならず、Mongo/Javaプロジェクト間の統合をテストする必要がありました。 Mongoのプラグインは私のために働いていませんでした。

オプション1(Docker):私のビルドとデプロイメントスタック(Maven、Jenkins、Docker)では、私にとって最も簡単なことは、次の2つの方法がありました。ビルド前のステップとしてMongoコンテナを起動し、統合環境設定でビルドを実行し、ポストビルドステップとしてコンテナをシャットダウンします。さらに、テストする必要がある特定のデータがある場合は、そのデータを持つコンテナを構築できます。

オプション2(Maven/Mongoのみ):Mavenのpre-integration-testsライフサイクルフェーズでは、Maven exec pluginを使用してオペレーティングシステムを呼び出し、Mongoを起動します。テストを実行し、Mongoを必要とするものがintegration-testフェーズで実行されていることを確認します。その後、post-integration-testフェーズでMongoを終了します。あなたのテストによっては、Mongoインスタンスの状態を変更すると、これは難しいかもしれません。それが問題であれば、Mongoを再初期化/破棄するためのスクリプトを記述し、上記のフェーズでこれらのスクリプトを呼び出すことができます。これは、基本的には現在のJVMに埋め込まモンゴDBを開始しhttps://github.com/flapdoodle-oss/de.flapdoodle.embed.mongo

:あなたはこのために使用することができますembed.mongo

Maven lifecycle reference

関連する問題