統合テストに必要な多くの依存関係をどのように模倣しますか?
私は「純粋な」単体テストにMockitoを使用しています。この場合の「純粋」とは、単一のクラスをテストし、そのすべての依存関係をモックすることを意味します。美しい。
次に、統合テストが行われます。この場合、統合テストは次のようなものをテストするとします。
- メッセージがキューに入れられます
- メッセージは「処理済み」です
- 応答メッセージは応答キューに入れられます
また、ステップ2で行われる処理は深刻なものであるとしましょう。それは、多くのデータベースの相互作用、複数の外部サービス、ファイルシステム、あらゆる種類のものに依存しています。フローがトリガーする副作用もたくさんあるので、応答が正しいことを単純に確認することはできません。副作用を確認する必要があります。
これらの各依存関係は、単一のステートレスサービスクラスによってラップされているため、それらは素晴らしく、モック可能です。
人々はこれをどのように扱っていますか?
上記のフローの副作用を確認できるように、Mockitoを使用したいと思います。ただし、Mocktioのドキュメント(およびその実装の大部分)は、「純粋な」単体テスト以外のコンテキストでの使用に強く反対しているようです。私はこのルートに行こうとしましたが、
- スタブデータを入力するのは困難です(データがたくさんあるため)
- これらのスタブされたインスタンスをSpringにBeanに注入させるのは困難です
- スタブをクリアせずに別の相互作用のセットを検証できるように、モックを「リセット」することは困難です。
編集
HSQLDBインスタンスのようなものでデータベースの問題を処理できることは知っていますが、外部サービスの問題はまだあります。再現性のために、これらのサービスが稼働していること、必要な状態にあることなどに依存することはできません。私が見る唯一のオプションは、それらをモックすることです。
なに?