Mockito行为调用错误

时间:2015-12-11 16:44:52

标签: java mockito

我定义了一些Mockito行为,并且我还打开了verboseLogging,试图调试我的测试失败的原因。我在日志中看到一些方法是使用空参数或空参数调用的,我没有这样做。

DataTypeService dataTypeService = Mockito.mock(DataTypeService.class, withSettings().verboseLogging());
when(dataTypeService.isMultivalued(anyString())).thenReturn(true);

我在日志中看到了这一点:

dataTypeService.isMultivalued("");
invoked: -> at com.example.rest.service.api.v3.impl.ContentServiceImplTest.getDocumentBySchemaMultiValueTest(ContentServiceImplTest.java:186) 
has returned: "false" (java.lang.Boolean)

我在日志中看到了类似于我所有其他语句的内容。它们返回null而不是我在thenReturn中的值,然后它继续并在第二次调用时返回正确的项目;但是,我只称它一次。是否定义了when语句,在没有参数的情况下执行它?

1 个答案:

答案 0 :(得分:0)

  

定义一个when语句,在没有的情况下执行它   PARAMS?

有点儿。当您使用anyString()时,Mockito会放置一些internal state,然后返回默认值(如anyString() Javadoc中所述)。 在执行此操作之后,它使用Matcher返回的默认值调用模拟对象,在内部记录其调用以与thenReturnthenThrow的后调用相关联。但是没有记录状态的模拟将返回default answer,在您的情况下为false。所以当你verboseLogging()记录录音电话时,打印第一个false。但是,在录制之后,你的模拟很好,在第二次和后续的调用中返回预期的值。因此,你所看到的只是Mockito是Mockito,没有错。 :)