迭代模拟集合时,verifyNoMoreInteractions失败

时间:2018-10-07 08:50:08

标签: java mockito

我有要进行单元测试的以下代码段:

public void method(Set<Foo> fooList){
    for (Foo f : fooList) {
       EnumClass i = f.get();
    }
}

我在Mockito中有以下测试代码:

Collection<Foo> mockFoos = Sets.newHashSet(mockFoo1, mockFoo2);
when(mockFoo1.get()).thenReturn(*some enum value*);
when(mockFoo2.get()).thenReturn(*some enum value*);
...
verifyNoMoreInteractions(mockFoos.toArray())

由于某种原因测试失败,我还尝试添加日志记录和模拟,并且唯一记录的交互是对get的调用。

我不认为这很重要,但Foo从其他班级继承而来。

2 个答案:

答案 0 :(得分:0)

mockFoos.toArray()将创建新对象,mockito将与之一起使用,而不是您的ockFoos集合。

根据模拟文档,最后一行应为 verifyNoMoreInteractions(mockFoos)

答案 1 :(得分:0)

通过使用ignoreStubs来解决它,mockito似乎将getwhen(mockFoo1.get()).thenReturn(*some enum value*);的“ {in调用””视为未调用的调用,这就是失败的原因,解决方案是使用: verifyNoMoreInteractions(ignoreStubs(mockFoos.toArray()))