我定义了一些Mockito行为,还打开了verboseLogging,试图调试我的测试失败的原因。我在日志中看到,一些方法是用空参数或null参数调用的,而我并没有这样做。
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)
我在所有其他when语句的日志中也看到了类似的内容。它们返回null,而不是我在thenReturn中的内容,然后它继续并在第二次调用中返回正确的项;不过,我只打过一次电话。定义when语句时,是否在没有参数的情况下执行它?
定义when语句时,在没有params?
有点。当您使用anyString()时,Mockito会放入一些内部状态,然后返回一个默认值(如anyStringJavadoc中所述)。之后,它用Matcher
返回的默认值调用模拟对象,在内部记录其调用,以与对thenReturn
或thenThrow
的后验调用相关联。但是,还没有记录状态的mock将返回默认答案,在您的情况下是false
。因此,当您verboseLogging()
时,它会记录录音呼叫,打印第一个false
。但是,在录制之后,您的mock就可以开始了,在第二次和随后的调用中返回期望的值。因此,你看到的只是Mockito就是Mockito,这没什么错。:)