При переключении на Kotlin статические методы перемещаются в сопутствующий объект. Однако не существует очевидного способа для модульного тестирования других методов, которые вызывают эти «статические методы».
В Java мы могли бы использовать MockStatic PowerMockito (SomeClass.class), чтобы убедиться, что статический метод вызывается в тестируемом методе. PowerMock теряет свою магию в Котлине.
Для тестирования я создал следующие классы.
public class DummyJava {
static public Void staticMechod(){
System.out.print("Dummy method is called");
return null;
}
}
class DummyCompanion {
companion object {
fun someCompanionMethod(){
System.out.printf("companion method is called\n")
}
}
}
Теперь есть еще один класс, который вызывает DummyCompanion.someCompanion
public class DummyWrapper {
public void callAStaticMethod(){
Dummy.staticMechod();
}
public void callCompanionMethod(){
DummyCompanion.Companion.someCompanionMethod();
}
}
Для юнит-теста callAStaticMethod()
Мы использовали следующее
@RunWith(PowerMockRunner.class)
@PrepareForTest({Dummy.class, DummyCompanion.Companion.class})
public class staticClassTest {
//This case works
@Test
public void testForStaticMethod() {
PowerMockito.mockStatic(Dummy.class);
DummyWrapper testObject = new DummyWrapper();
Mockito.when(Dummy.staticMechod()).thenCallRealMethod();
testObject.callAStaticMethod();
PowerMockito.verifyStatic(Dummy.class);
Dummy.staticMechod();
}
//This case doesn't work. It always passes.
@Test
public void testForCompanionMethod() {
PowerMockito.mockStatic(DummyCompanion.Companion.class);
DummyWrapper testObject = new DummyWrapper();
testObject.callCompanionMethod();
PowerMockito.verifyStatic(DummyCompanion.Companion.class,Mockito.times(1));
DummyCompanion.Companion.someCompanionMethod();
}
У меня вопрос, как проверить, вызван ли сопутствующий метод.