以下代码:
List<Object> list = spy(new LinkedList<>());
list.stream().map(item -> item);
无效,在测试期间导致异常:
Cannot call real method on java interface. Interface does not have any implementation!
Calling real methods is only possible when mocking concrete classes.
//correct example:
when(mockOfConcreteClass.doStuff()).thenCallRealMethod();
但是,调用size()
工作正常。 stream()
方法有什么问题?我正在使用Mockito 1.8.4
ver。
答案 0 :(得分:5)
方法java.util.List.stream()
是java.util.Collection
中的默认方法。 Mockito版本早于1.10.5(可能是1.10.0)无法处理默认方法(它缺少java.lang.reflect.Method.isDefault()
检查,可能还有一些特殊的间谍来处理这些方法。)
我已经确认它适用于Mockito 1.10.19,所以我建议在Java 8中编写代码时进行升级。