无法将对象添加到列表的 Mockito Spy

问题描述 投票:0回答:1

我有一个单元测试,它创建一个列表的 Mockito.Spy 而不是使用常规列表。稍后在测试中,它使用 verify 来检查列表中调用了哪些方法。然而,它在准备步骤中失败并出现 NullPointer 异常。

首先是基本情况,这里我只是向 ArrayList 添加一个 int ,正如你所期望的,除了添加对象之外,没有什么特别的事情发生。

ArrayList<Integer> idlist1 = new ArrayList<Integer>(); idlist1.add(39);
现在是这个测试的实际情况,除了创建了一个 Mockito Spy 之外,其他都是一样的。 Spy 的默认行为是调用列表中的实际方法,所以我期望与上面相同,但实际上当它尝试时会失败 

add

:

ArrayList<Integer> idlist2 = Mockito.spy(new ArrayList<Integer>()); idlist2.add(39);
错误消息显示“NullPointerException:无法读取数组长度,因为“elementData”为空”,并且在调试器中我可以看到它一直到达 ArrayList::add,但随后 add(e, elementData, 0) 失败因为 elementData 为空。在构造函数 ArrayList() 中,它应该设置为一个空数组,但是 Spy 的某些内容必须以某种方式再次将其设置为 null?

第一个可能的解决方案是不在名单上创建间谍。很公平,但我想了解此错误消息,因为我猜测其他间谍对象也可能会出现此问题。

第二种可能的解决方案是在对其进行间谍之前将对象添加到真实列表中,但我再次想了解这里发生了什么。 谢谢!

java arraylist mockito
1个回答
0
投票
List lst = new ArrayList<Integer>() lst.add(39); List<Integer> idlist2 = Mockito.spy(lst);
    
© www.soinside.com 2019 - 2024. All rights reserved.