私はmockitoの大ファンですが、残念ながらJava 8を使用する私のプロジェクトの1つでは失敗します...
シナリオ:
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()
(これは動作します)?