2012-01-27 9 views
47

特定のオブジェクトがMockito模擬であるかどうかをコードで伝えることは可能ですか?オブジェクトがMockitoモックであるかどうかをどのように確認できますか?

私がこれをやりたいのは、偽装が使用されているときに別のエラーメッセージを返すことです。これは他の開発者に、あらかじめ用意されたモックを使用して、モック自体を作成するのではなく、便利な方法でコールに応答するように設定されていることを示唆するために使用されます。

私が持っている最高のものはobject.getClass().getName().contains("EnhancerByMockitoWithCGLIB")ですが、これはハッキリです。

答えて

45

そのようなAPIが存在しないようorg.mockito.internal.utilパッケージで方法がある(問題を提起してください、それがあるべき!)幸いなこと(以下コメント以下)になります。将来Mockito.isMock()方法で

import org.mockito.internal.util.MockUtil; 

new MockUtil().isMock(obj) 

は、公開APIに追加される可能性があります(Issue 313: Provide isMock outside of org.mockito.internal)を参照)。

+3

あなたの答えに続いて、[MockUtilのソース](https://fisheye2.atlassian.com/browse/mockito/trunk/src/org/mockito/internal/util/MockUtil.java?)を見ました。 r = 2020)、そして私的な 'isMockitoMock'メソッドのすぐ下に、使用できるように見えるpublic' isMock'メソッドがあります。私はMockitoのメーリングリストに投稿して、org.mockito.internal.utilのメソッドを自分で呼び出すことをお勧めします。 – mikej

+0

'org.mockito.internal.util'パッケージの意図の1つは、Mockitoチームがこのパッケージ内の何かを新しいバージョンで変更する可能性があるということです。このパッケージを使用すると、将来的にテストが破綻する可能性があります。しかし、私たちがこの特定の方法を取り除くことは非常にありそうもないので、使用するのがかなり安全だと言います。 –

+0

@mikej:+1、何とか私はそれを逃した、ありがとう!私は古い答えを削除し、代わりにあなたの提案を入れてください。あなたが気にしないことを願っています。 –

32

フォローアップとして、MockitoパブリックAPIは現在、このメソッドを持っています

MockingDetails org.mockito.Mockito.mockingDetails(Object toInspect) 

@デビッド・ウォレスが提起問題の結果です。返されるオブジェクトは 'isMock()'と 'isSpy()'のメソッドをサポートしており、後でさらにモック関連の情報を提供するように拡張されています。

関連する問題