【发布时间】:2014-12-27 00:15:25
【问题描述】:
我是 mockito 的忠实粉丝,不幸的是,对于使用 Java 8 的 one of my projects,它对我来说失败了......
场景:
public final class MockTest
{
@Test
public void testDefaultMethodsWithMocks()
{
final Foo foo = mock(Foo.class);
//when(foo.bar()).thenCallRealMethod();
assertThat(foo.bar()).isEqualTo(42);
}
@FunctionalInterface
private interface Foo
{
int foo();
default int bar()
{
return 42;
}
}
}
很遗憾,测试失败,foo.bar() 返回 0。
当我取消注释 when() 行时,我得到一个堆栈跟踪...
java.lang.NoSuchMethodError: java.lang.Object.bar()I
at com.github.fge.lambdas.MockTest.testDefaultMethodsWithMocks(MockTest.java:18)
这是 maven 上可用的最新稳定版本;谷歌搜索并没有告诉我关于 Java 8 中这个新功能的 mockito 状态...
除了在它们上实现接口和spy() 之外,你能否让它以其他方式工作(这可行)?
【问题讨论】:
-
我怀疑这是 Mockito 处理模拟的动态代理生成方式的影响,并且需要更新基础架构。您是否检查过 Mockito 是否存在未解决的问题?
-
@chrylis 不,不是特别针对这一点;有一个与 Java 8 和默认方法相关的问题被打开,问题开启者正确地告诉(我一开始没想到这一点很愚蠢)他必须用 Java 8 编译 mockito 才能使测试工作。看起来很阴沉:/
-
是的。仍然有一些库维护 1.4 的分支。
标签: java mockito java-8 default-method