我定义了一些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语句,在没有参数的情况下执行它?
答案 0 :(得分:0)
定义一个when语句,在没有的情况下执行它 PARAMS?
有点儿。当您使用anyString()时,Mockito会放置一些internal state,然后返回默认值(如anyString() Javadoc中所述)。
在执行此操作之后,它使用Matcher
返回的默认值调用模拟对象,在内部记录其调用以与thenReturn
或thenThrow
的后调用相关联。但是没有记录状态的模拟将返回default answer,在您的情况下为false
。所以当你verboseLogging()
记录录音电话时,打印第一个false
。但是,在录制之后,你的模拟很好,在第二次和后续的调用中返回预期的值。因此,你所看到的只是Mockito是Mockito,没有错。 :)