当使用获取集合作为参数的方法模拟类时,我遇到了一个令人费解的问题。
public class Foo {
public Foo () { }
public boolean doSomething(List<Bar> bars) {
return true;
}
}
public class Bar {
public Bar() {}
}
尝试创建模拟时
Foo foo = mock(Foo.class);
我得到:
Mockito can only mock visible & non-final classes.
If you are not sure...
Underlying exception : java.lang.IllegalArgumentException: java.lang.ClassCastExcception@1ba9917e
...
很抱歉简短的错误描述,我不得不从离线终端手动复制。
当我将doSomething()
方法的参数更改为仅doSomething(Bar bar)
时,它成功地创建了模拟。
最后一件奇怪的事情是,它不会在其他工作站上重现。
经过多次试验和错误,机器之间的唯一区别是JDK版本。在它不工作的机器上,我们有 1.8.0_05。更新到 1.8.0_45 修复了它。