Попытка применить метод MockUp
по методу интерфейса по умолчанию Java 8, а JMockit сообщает мне, что метод не найден. Это было проверено с помощью JMockit 1.15, 1.19 и 1.25. Вот очень простой случай использования:Как использовать JMockit MockUp для метода интерфейса по умолчанию
@RunWith(JMockit.class)
public class TestTest {
public interface MyInterface {
default void foo(int f) {
bar(String.valueOf(f));
}
void bar(String s);
}
public class MyClass implements MyInterface {
public void bar(String s) {
System.out.println(s);
}
}
@Test
public void testtest() throws Exception {
new MockUp<MyClass>() {
@Mock
void foo(int i) {
System.out.println("MOCKMOCK " + (i*2));
}
@Mock
void bar(String s) {
System.out.println("MOCK " + s);
}
};
MyClass baz = new MyClass();
baz.foo(5);
baz.bar("Hello world");
}
}
Это заставляет меня ошибку
java.lang.IllegalArgumentException: Matching real methods not found for the following mocks:
com.example.dcsohl.TestTest$1#foo(int)
at com.example.dcsohl.TestTest$1.<init>(TestTest.java:29)
at com.example.dcsohl.TestTest.testtest(TestTest.java:29)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
...
Как мы можем @Mock этот метод?
Так что 'MockUp' просто не поддерживает это вообще? Обычно я не использую 'MockUp', если только это не нужно, и это казалось бы ситуацией, чтобы оправдать ее - очевидно, более сложным, чем вышеупомянутый метод ... но это не может быть сделано? – dcsohl
Да, в настоящее время (до JMockit 1.25), 'MockUp' не поддерживает методы, реализованные в интерфейсах (по умолчанию или статические методы). В будущем можно будет добавить поддержку. –