У меня есть MyClass, унаследованный от BaseClass с методом doBaseStuff()
, который не перегружен:
public class BaseClass {
public String doBaseStuff(String var1, String var2) {
//Do something
return someStringValue;
}
public class MyClass extends BaseClass {
public String doMyStuff(String var1, String var2) {
//Do some stuffs
doBaseStuff(var1, var2);
//Do more stuffs
return someStringValue;
}
}
Тогда у меня есть контрольный пример для MyClass
:
@RunWith(MockitoJUnitRunner.class)
public class MyClassTest {
@InjectMocks
MyClass myClass;
public void testDoOtherThing() {
// Some setups
when(myClass.doBaseStuff(dummyVar1, dummyVar2))
.thenReturn("This isn't catching the invocation!");
myClass.doMyStuff(dummyVar1, dummyVar2);
// Some verify statements
}
}
Тем не менее, оператор when
/ then
для doBaseStuff()
не высмеивает поведение всякий раз, когда вызывается этот метод.
В качестве (очень дерьмового) обходного пути я могу объявить отдельный BaseClass
объект как член MyClass
:
public class MyClass extends BaseClass {
private Baseclass baseClass;
...
baseClass.doBaseStuff(var1, var2);
...
}
public class MyClassTest {
@InjectMocks
MyClass myClass;
@Mock
BaseClass baseClass;
...
when(baseClass.doBaseStuff(dummyVar1, dummyVar2))
.thenReturn("This technically works, but ugh...");
...
}
Однако MyClass
один из подклассов BaseClass
имеет общую функциональность.
Есть ли способ для MyClass
макета быть осведомленным о реализации doBaseStuff()
?