stream()方法不适用于Mockito间谍

Daw*_*ura 2 java testing collections mockito

代码如下:

 List<Object> list = spy(new LinkedList<>());
 list.stream().map(item -> item);
Run Code Online (Sandbox Code Playgroud)

不起作用,在测试期间导致异常:

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();
Run Code Online (Sandbox Code Playgroud)

但是,通话size()工作正常.stream()方法有什么问题?我正在使用Mockito 1.8.4ver.

Bri*_*ian 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中编写代码时进行升级.