Java 使用Mockito isEmpty的mock列表始终返回false,即使大小为0

Java 使用Mockito isEmpty的mock列表始终返回false,即使大小为0,java,mocking,mockito,Java,Mocking,Mockito,我在玩Mockito(1.9.5)并且在第一个简单的测试用例中卡住了: List mockedList = mock(ArrayList.class); assertEquals(0, mockedList.size()); // Passed assertTrue(mockedList.isEmpty()); // Failed 有人能解释为什么isEmpty()在这里返回false,而size()返回0吗?我认为这是因为mockito不知道isEmpty()的语义,当它遇到布尔方法时,会用

我在玩Mockito(1.9.5)并且在第一个简单的测试用例中卡住了:

List mockedList = mock(ArrayList.class);
assertEquals(0, mockedList.size()); // Passed
assertTrue(mockedList.isEmpty()); // Failed

有人能解释为什么isEmpty()在这里返回false,而size()返回0吗?

我认为这是因为mockito不知道
isEmpty()的语义,当它遇到布尔方法时,会用默认值
false
对其进行模拟。同样的想法也发生在
size()
上,但是这里的默认值是
0


基本上,您需要定义模拟对象的预期行为。如果不这样做,它将返回默认值。

啊,我明白了。所以我必须使用
when(mockedList.isEmpty()).thenReturn(true)
以存根
模拟列表
。谢谢我知道你们在这一点上只是在玩弄,但这张单子是一件不好的事情。它已经过良好的测试,易于设置(例如Arrays.asList),并且不依赖于外部资源。(正如您已经看到的)在无效状态下构建模拟列表是很容易的,如果您使用的是真实列表,则不会发生这种情况。