2016-11-24 13 views
4

ClassAにはClassBというメンバーがあり、私はClassBを嘲笑しています。Mockitoを使ってモックとのすべてのやりとりを印刷する方法

テストの最後に、すべてのモックコールの動作と検証を設定するには、verify(..)verifyNoMoreInteractions(..)を使用します。

いろいろな方法とのやりとりが10以上あります。

JUnitに模擬インタラクションをすべて印刷してコード内で使用させる方法はありますか?

今、私はコードを読んでいるだけで、呼び出しを探していて、テストで検証ラインを書き込んでいます。

私の使用例:私が模倣する他の多くのクラスを使用するアルゴリズムを使用したクラスがあります。これは簡単な方法です(私の状況ではTDDはできません)。他にもたくさんのメソッドを呼び出す新しいメソッドを追加しながら、私は、コードが現在動作しているときに、x量のメソッドしか呼び出されていないことを確認したいと思います。これは、誰かが将来何かを変更したかどうかを確認します。誤ってメソッドを4回でなく5回呼び出すと、テストは失敗します。

+1

あなたの目標は何ですか?何を試しましたか?なぜあなたはそれらのやりとりを印刷する必要がありますか?どのように "コード内で使用する"のですか? – Onheiron

+0

@Onheironすべてのインタラクションをモックとした後、私はverify(mock、times(x))を使うことができます。この後にverifyNoMoreInteractions(mock)メソッドの動作を設定するために相互作用のリストを持っていたいと思います。 – USer22999299

+0

'verify(mock、times(x))。method(1);を使うにはすべてのインタラクションのリストが必要です。これはmockitoの動作です:mock.method(1)とのやりとりがxとそれ以下であることを確認します。 – Onheiron

答えて

8

MockingDetailsprintInvocationsまたはgetInvocationsのいずれかを使用して、モックに属するインタラクションを検査できます。しかし、これは起こった順序で複数のモックに属する呼び出しのリストを生成しません。個々のモックとの相互作用だけです。

コメント欄に消極的と注意点を認識し、私はこれがあなたの本当の制約を分析し、回帰を防ぐよりもあなたの現在の実装によりにロックを行う手法であると言えるでしょう。さらに、アルゴリズムが直接の共同作業者とのやりとりが多い場合は、アルゴリズムをリファクタリングする必要があることを示している可能性があります。

システムがテストされていない、または文書化されていないレガシーコードの場合、これは回帰テストまたは分析をプログラムで作成する実際の方法です。一時的な開始点詳細な回帰テストを行います。代わりに各コンポーネントの契約を文書化し、次にそれらの相互作用と制約を確認するテストを作成します。 Mockitoの推奨事項(this article by Mockito's original developerまで)は、テストが合格するまでスタブを追加し、高価なまたは偶数以外の副作用がある場合にのみ検証/カウントを追加する傾向があります。

+0

私はこのコメントに戻ってくるたびにこれを再計算しなければならないので、 'import static org.mockito.Mockito.mockingDetails; System.out.println(mockingDetails(mock).printInvocations()); ' – elhefe

関連する問題