java,mockito - 我怎样才能找出哪些模拟被调用?

时间:2013-02-14 19:08:14

标签: java mockito

当模拟调用时,我并不关心 - 几乎,我正在将一堆模拟迁移到真实世界的代码中,因为集成测试中的模拟有时非常愚蠢。 / p>

无论如何,我在这里有一个充满嘲笑设置的巨大课程 - 但我真正想要的是每个测试找出使用的模拟。

使用mockito,我可以得到它,我不知道,“记录”或打印或某事特定“何时”实际执行的东西?

2 个答案:

答案 0 :(得分: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();
}

产地:

  ######在mock / spy上记录方法调用#1 ######## list.size();调用: - &gt;在      

soanswers.mockito.LogCalls.testLogging(LogCalls.java:35)有   返回:“0”(java.lang.Integer)

     ######在mock / spy上记录方法调用#2 ######## stubbed: - &gt;在      

soanswers.mockito.LogCalls.testLogging(LogCalls.java:35)list.size();   调用: - &gt;在   soanswers.mockito.LogCalls.testLogging(LogCalls.java:37)有   返回:“6”(java.lang.Integer)

答案 1 :(得分:1)

我在mockito网页上发现了一个问题,表明这是可能的: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()));

     

前者会将调用信息打印到std out。这是一个例子。   当然,这只是一个提案。位置信息( - &gt; at ...),   然而,只是听众得到的东西,因此不可能   更改时没有暴露位置及其字段。

     ######在mock / spy上记录方法调用#3 ######## foo.giveMeSomeString(“另一个字符串值”); - &GT;在      

org.mockitousage.debugging.VerboseLoggingOfInvocationsOnMockTest.usage(VerboseLoggingOfInvocationsOnMockTest.java:154)   将返回:&gt;一些返回值&lt; (java.lang.String)方法已经   存根。 - &GT;在   org.mockitousage.debugging.VerboseLoggingOfInvocationsOnMockTest.usage(VerboseLoggingOfInvocationsOnMockTest.java:149)

     #      

使用级别测试是InvocationListenerCallbackTest和   VerboseLoggingOfInvocationsOnMockTest。你可能想要更近一点   看一下后者(见课堂评论)。与使用级别一样   对标准内容进行断言的测试   输出流,它有点乱。

我在我的一个测试中尝试过,它似乎做你想要的。您应该使用第一个看起来像这样的示例:

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