我有要进行单元测试的以下代码段:
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从其他班级继承而来。
答案 0 :(得分:0)
mockFoos.toArray()将创建新对象,mockito将与之一起使用,而不是您的ockFoos集合。
根据模拟文档,最后一行应为 verifyNoMoreInteractions(mockFoos)
答案 1 :(得分:0)
通过使用ignoreStubs
来解决它,mockito似乎将get
中when(mockFoo1.get()).thenReturn(*some enum value*);
的“ {in调用””视为未调用的调用,这就是失败的原因,解决方案是使用:
verifyNoMoreInteractions(ignoreStubs(mockFoos.toArray()))