2017-04-08 4 views
-1

私は統合テストで非常に具体的な状況があります。統合テストでデータベースにヒットしてもよろしいですか?

私はスプリングブートを使用していくつかのマイクロサービスで構成されたレストAPIを開発しています。これらのサービスの中には、基本的に、UIアプリケーションによってアクセスされるか、または内部の検証/クエリに消費されるための操作が難しいものがあります。

すべてのデータベースの操作は、従来のライブラリ(jpaはありません)によって行われ、非標準のデータベースを使用しています。良い例は実際のデータベースを使わないと言いますが、このシナリオでは、テスト時にダミーデータベースをどのように使用するのか想像できません(dbunitやh2など)。この方法で:

1 - 統合テストで実際のデータベースにヒットするのはいいですか?

1がOKであれば、私は別の質問があります。

通常、私たちはユニット/統合テストでのデータの状態を変更しないと。テストはお互いに独立していなければなりません。

私の場合、私はポストメソッドのレスポンスでエンティティIDが何であるかを知っているだけなので、get/put/deleteメソッドを実装するのは難しいです。もちろんget/put/deleteメソッドでは、最初に挿入して別の操作を行うことはできますが、この観点では、最後にテストの開始時とは異なる状態のデータベースを作成します。このように、別の質問があります:

2 - どのように私はテストの前に同じ状態にデータベースを回復することができますか?

私はそれが特定の状況である可能性があることを知っていますが、このシナリオをうまくテストするエレガントな方法を見つけるためには本当に助けに感謝します。

ありがとうございます。

+1

統合テスト*は、*統合テストであるため、実際のデータベースにヒットします*。データベースをシードするには、DbUnitなど、さまざまな方法がありますが、他にもあります。 –

+0

データを含むデータベースのコピーを取って、統合テストを終了した後に使用してください –

+0

ライブデータを使用することを考えていますか?テストを実行している間に他の人がデータにアクセスしている可能性がありますか?データベースを変更して他の誰かがあなたのテストデータにアクセスしてそれが実際のデータだと思うなら、その原因は何か? – ajb

答えて

0

インターフェイス統合テストにインメモリH2データベースを指定し、特定のテストに必要に応じてデータを入力できます。これは、Jenkinsや類似の単体テストシステム上のデータベースが意味をなさない状況で実行している場合に便利です。実際には、エンド・ツー・エンドの統合、または細粒度の統合をテストしているかどうかによって異なります。

+0

わかりましたかわかりません。しかし、私の状況では、h2のようなメモリ内のデータベースを使ってテストを行うのは簡単ではありません。 1 - 私は標準のデータベースを使用していません(データベースのメタ言語がansi sqlに完全に従っていないことを意味します)。各テーブルとプロシージャについて2つの定義を持つことは問題ありません。 2 - 私はjpaと私の 'db library'を使っていません。それは、プロシージャーを通してターゲットデータベースに照会するだけです。 –

+0

Mockitoはもう一つの選択肢ですが、単体テストに重点を置いています。このような状況でも動作します。 – Jason

+0

私の手続き呼び出しをテストする必要があります。すべてのアプリケーションはこのアプローチを使用するように設計されています。 Mockitoとdbunit/h2は結果を模擬するだけで非常にクールです。私の場合ではない、私はポイント・ツー・ポイント・バリデーションをする必要がある。 –

1

異なった質問をする必要があります:プロダクションデータベースに対してテストを実行するためのリスクはありますか?

意味:テストでコード内の問題のみが判明した場合、誰もが満足します。

しかし、あなたが台無しにしてデータベースが真剣に壊れてしまい、最初は失敗したバックアップのためにサイト全体を取り除く必要があります...あなたのビジネスは2日間オフラインになるので、あなたのマネージャーはどうなると思いますかそんな?

ロングストーリーショート:それは依存します。あなたがリスクを含むことができれば - はい。しかし、そうでない場合は、他の選択肢を探してください。少なくとも、あなたのマネージャーがあなたがしていることを理解していることを確認してください。

+0

確かに、すべての「プロダクションテスト」のリスクを常に負う必要があるため、プロダクション環境でこれらのテストを実行することに興奮していません。理想的には、すべてのデータベースを破壊するべきではありません(それはほんのわずかな操作です)が、私の考えではデータベースを初期状態に回復する方が良いです。 統合環境を構成することはできませんが、本番環境からの実行を避けるための代替手段となります。 とにかく、ダミーのデータベースでデータソースをモックすることができるjpaを使用すると、この種のテストが非常に簡単になるので、私は代替案を検討しています。 –

0

統合テストはうまくいきます。実稼働環境でそれらを実行しない限り、私は言うでしょう。これにより、アプリケーション全体をテストしたり、レスポンス、シリアライゼーション、およびデシリアライゼーションをどのように処理するかをテストできます。テストケースでは、本番データベースに期待する内容を処理し、すべてのテストテストを分離し、テストケースで作成したものを元の状態に戻した後で削除する必要があります。そうしないと、テストケースが衝突する可能性があります。ローカルデータベースまたは専用のテストデータベースで統合テストをテストします。

関連する問題