Я хочу создать метод в суперклассе класса test, который заглушает некоторые часто используемые методы в классах под тестом, но некоторые из этих методов могут не существовать.
Например, у меня есть иерархия классовкак это:
abstract class A {
void search(); // implemented by subclass
String getFoo() { return "REAL FOO"; }
}
class B extends A {
void search() {
getFoo();
}
}
class C extends A {
void search() {
getFoo();
getBar();
}
String getBar() { return "REAL BAR"; }
}
Существует множество подклассов A (инструмент, сгенерированный скелет), поэтому я хочу создать суперкласс, чтобы мне было проще тестировать:
abstract class AbstractSearchTest {
A underTest;
@Test void test() {
doReturn( "FOO" ).when( underTest ).getFoo();
doReturn( "BAR" ).when( underTest, "getBar" ); // THE PROBLEM!
underTest.search();
}
}
class BSearchTest extends AbstractSearchTest {
BSearchTest() {
underTest = new B();
}
}
class CSearchTest extends AbstractSearchTest {
CSearchTest() {
underTest = new C();
}
}
Который в основном говорит: «Прежде чем вызвать search()
, заглушку getFoo()
. О, если у подкласса есть getBar()
, заглушите его тоже».Но я не могу этого сделать, поскольку он выдаст org.powermock.reflect.exceptions.MethodNotFoundException .Как это сделать?