1

モックがいつ呼び出されるかはあまり気にしません。ほとんどの場合、統合テストのモックはかなりばかげているため、多くのモックを実際のコードに移行しています。

とにかく、ここではモックのセットアップでいっぱいの巨大なクラスを使用していますが、実際に必要なのは、各テストでどのモックが使用されているかを調べることです。

mockitoを使用すると、特定の「いつ」が実際に実行されるたびに、「ログ」や印刷などにアクセスできますか?

4

2 に答える 2

4

Mockito 1.9.0以降、 verboseLogging設定を使用できます。

たとえば、これは次のとおりです。

@Test
public void testLogging() {
  final List<?> mockList = mock(List.class, withSettings().verboseLogging());
  when(mockList.size()).thenReturn(6);

  mockList.size();
}

生産:

######モック/スパイでのロギングメソッド呼び出し#1 ######## list.size(); 呼び出された:-> at

soanswers.mockito.LogCalls.testLogging(LogCalls.java:35)が返しました: "0"(java.lang.Integer)

######モック/スパイでのロギングメソッド呼び出し#2 ########スタブ:-> at

soanswers.mockito.LogCalls.testLogging(LogCalls.java:35)list.size(); 呼び出された:-> at soanswers.mockito.LogCalls.testLogging(LogCalls.java:37)が返された: "6"(java.lang.Integer)

于 2013-02-14T19:35:42.260 に答える
1

これが可能であることを示唆するmockito Webページの問題を見つけました: http://code.google.com/p/mockito/issues/detail?id=148

こんにちは、次のブランチにパッチを用意しました。変更が必要な点についてフィードバックをいただければ幸いです。

http://code.google.com/r/muratknecht-mockito-issue148/

API は同意済みです。

Foo foo = mock(Foo.class, withSettings().verboseLogging());

Foo foo = mock(Foo.class, withSettings().callback(new RememberingListener()));

前者は呼び出し情報を標準出力に出力します。ここに例があります。もちろん、これは単なる提案です。ただし、位置情報 (-> at ...) は単にリスナーが取得するものであるため、Location とそのフィールドを公開せずに変更することはできません。

###### モック/スパイでのメソッド呼び出し #3 のロギング ######## foo.giveMeSomeString("another string value"); -> で

>some return value< (java.lang.String) メソッドがスタブ化されました。-> org.mockitousage.debugging.VerboseLoggingOfInvocationsOnMockTest.usage (VerboseLoggingOfInvocationsOnMockTest.java:149) で

#

使用レベルのテストは、InvocationListenerCallbackTest と VerboseLoggingOfInvocationsOnMockTest です。後者を詳しく見てみたいと思うかもしれません (クラスのコメントを見てください)。標準出力ストリームの内容に関するアサーションを行う使用レベルのテストと同様に、少し面倒です。

私は自分のテストでそれを試してみましたが、あなたが望むことをしているようです。次のような最初の例を使用する必要があります。

Foo foo = mock(Foo.class, withSettings().verboseLogging());
于 2013-02-14T19:32:58.467 に答える