インターフェイスのプロバイダーは、テスト用のモック実装も提供する必要がありますか?


8

単体テストで発見されたはずのバグについて、前回の統合テストで多くの時間を無駄にしました。問題は、呼び出したインターフェイス/サービスが予期したとおりに動作せず、ユニットテストがこの問題を見つけられなかったということでした。ユニットテストのためにそのインターフェイスをモックしたため、モックは当然、インターフェイスが何を間違って解釈するかに基づいていました。行う。インターフェイスの説明/仕様(簡潔なJavaDocコメント)があいまいであり、私たちの誤解の原因となったため、今では、インターフェイスを提供してくれた親愛なる同僚に少し怒る可能性があります。一方、同じ同僚がインターフェースのモック実装を提供してユニットテストで呼び出すことができれば、問題は回避できると思いました。

さて、共有インターフェースを提供して使用するチーム間でモックオブジェクトの作成を整理する上でのベストプラクティスは何でしょうか。あなたの経験は何ですか?


このすべての非難の調査において、理解が正しかったかどうか作者に尋ねないように自分のためにいくつかを含めていただければ幸いです...あなたの側の1つの質問ですべての痛みを救うことができたでしょう。
Walter

2
ウォルター、編集と建設的なコメントをありがとう。あなたの提案は質問に直接答えるものではありませんが、実際には私が抱えている元の問題に対する解決策です。自分の理解について良い質問をするのはとても難しいので、別のアイデアを思いつきました。他のチームに、インターフェイスを使用する計画を確認するよう依頼することもでき、問題を発見したかもしれません。
Robert Jack Will

回答:


10

理想的には、はい。

他の人が使用するコードを書く人は、コードを補完するものを提供する義務はありません。しかし、もしあなたが実施例を含むことができる- -人々はあなたのコードを使用するように(と誰もが常にこの考え方を書くべきである)、広範な関連文書を希望している、非常に便利。

私はこれまでにドキュメントを読んだことはなく、「これはばかげている。ドキュメントが多すぎる方法だ」と思ったことはありません人々は当然のことながら、不要だと思うものを飛ばすことに才能があります。ただし、説明されていないドキュメントや概念を単純に読んで補間することはできません。したがって、仮定しても安全です。優れたドキュメントが多すぎるということはありません。また、初心者の幼児としてそれを読む人(つまり、できるだけ単純にする)を想定している必要があります。

クラスをインスタンス化して使用する方法の例は常に役立ちます。ただし、コードがドキュメントに依存しすぎて理解できない場合、それは別の(個別の)問題です。

この答えは、同僚に怒鳴ることを正当化する火力と見なすべきではありません。これは、私が有益であり、実行する必要があると思うことのガイドラインにすぎません。これはあなたの状況ではまったく役に立ちませんが(私はあなたの質問は基本的には怒りだと思いますが)、次にできる最善のことは、模範を示し、同僚がやって来ることを願っています。


1
私はしばらくしているについてはあまりドキュメントを訴えて自分自身を発見し、それらのインスタンスはまれだった(と非常に長い言葉で表現し、ドキュメントを混乱が生じた品質でより多くの問題を取っていました)。
ティムポスト

1
@ティム:ありがとう、編集したばかり-私は良いドキュメントを参照していました。残念ながら、誰でも「ドキュメント」として大量のゴミを書くことができます!
JK、

5

インターフェイスのプロバイダーは、テスト用のモック実装も提供する必要がありますか?

いいえ。ただし、プロバイダーはユニットテストのソースコードも提供する必要があります。これらの単体テストを読むと、ライブラリの使用方法がよくわかります。プロバイダーに期待することを指定するために、プロバイダーテストにユニットテストを追加できます。

偽物/スタブ/モックを実装できるモックツール/フレームワークは数多くあります。

偽の実装のどの部分が実際の実装とほぼ同一である必要があり、どの部分が単なるファサードであるかを知ることができないため、モック実装をプロバイダーに依頼することは、コストと利益の関係がよくありません。

これを回避するもう1つの方法は、プロバイダーがコード契約を使用して、指定された方法でlibが使用されていることを確認することです。


+1「偽物/スタブ/モックを実装できるモッキングツール/フレームワークは数多くあります。」
Armand

単体テスト:ドキュメントとして使用する際に2つの問題が発生します。1。サービスがサポートするものの例のみを示していますが、私が考えている特定の用途がサポートされているかどうかはわかりません。2.単体テストの読み取りは、コードの読み取りと同じくらい要求/疲れるので、すべての作業を節約するソリューションを探しています。テストやコントラクト(私たちも調べています)など、自動的に機能するものを探しています。
Robert Jack Will

「プロバイダーはモックの使用を知ることができません」:私はそれについて確信がありません。1つは、モックがすべての前提条件(サービスが正しく使用されているかどうか)をチェックし、いくつかのダミー値を返すことです。基本的に、クライアントの単体テストに必要なすべてのことです。これを上手く行うためにプロバイダーが欠落している情報について詳しく説明していただけますか?
Robert Jack Will

the mock should check all the preconditions:なぜモックは実際のlibがこのチェックを行うかどうかをチェックする必要があるのですか?実際のlibとの統合テストがある場合、これらのテストで問題が発生するはずです。
k3b

k3b:できるだけ早くバグを検出したいと考えており、統合テストはかなり遅くなる可能性があります。これはまさに私たちが抱えていた問題でした。まあ、私たちはすでに統合テストがより早くそしてより頻繁に行われるようにプロセスを改善するために取り組んでいますが、それでもユニットテストは可能な限り多くのバグを見つける必要があります。
Robert Jack Will
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.