統合テストに必要な多くの依存関係をどうやって模擬しますか?統合テストのためのモック
私は純粋な単体テストにMockitoを使用します。この場合の '純粋な'とは、単一のクラスをテストし、すべての依存関係を嘲笑することを意味します。綺麗な。
今すぐ統合テストが行われます。のは、この場合には、統合テストはこのような何かをテストしますと言ってみましょう:
- メッセージがキューに置かれ
- メッセージが
- 応答メッセージが応答キュー
ステップ2で行われる処理が重大なものであるとしましょう。これは、データベースのやりとり、複数の外部サービス、ファイルシステム、あらゆる種類のものに依存しています。また、フローが引き起こす多くの副作用があります。そのため、応答が正しいことを単に保証することはできません。副作用を確認する必要があります。
これらの依存関係のそれぞれは、単一のステートレスサービスクラスによってラップされています。
どのように人々がこれを処理していますか?
私はMockitoを使用して、上記の流れに伴う副作用を確認することができます。しかし、Mocktioのドキュメンテーション(そして大部分は実装です)は、「純粋な」単体テスト以外の文脈でそれを使用することに対して強く反対しているようです。私はこのルートを行くことを試みたが、
- それは
- それは春は私の豆にそれらのスタブのインスタンスを注入持ってすることは困難ですが、
- それは難しい(それがたくさんありますよう)スタブデータを移入することは困難ですスタブをクリアすることなく、別の一連の相互作用を検証できるようにモックを「リセット」します。
EDIT
私はHSQLDBインスタンスのようなもので、データベースの問題を扱うことができることを知っているが、外部サービスの問題がまだあります。再現性のために、私はこれらのサービスが稼働していること、私が必要とする状態にいることなどに頼ることはできません。
Whatdayaですか?
統合テストは2通りの方法で行うことができます。それはあなたのような統合テストのように聞こえる、接続コンポーネントがうまくいっていることをテストする(本質的にAPIをテストする)。しかし、時には統合とはエンドツーエンドを指すため、サービスを嘲笑せずに実際にデータベースにアクセスできるようにします。この明確化は答えを助けることができます。タイプのさらなる明確化のためにhttp://stackoverflow.com/questions/4904096/whats-the-difference-between-unit-functional-acceptance-and-integration-testを参照してください。 –
It実際には、多くの外部依存関係を必要とするテスト(統合またはエンドツーエンド)に適用されます。例えば、データベーススタブをHSQLDBインスタンスに置き換えることができますが、私はまだ他のすべてのサービスを持っています。明確にするために少し質問を編集します.. –
どうしてあなたは嘲笑問題を最終的に解決しましたか? – Pupsik