Вот моя структура класса
public abstract class MyTabFragment extends Fragment {
public void myMethod(final Parameter reason) {
if (isAdded()) {
getActivity().runOnUiThread(() -> {
if (getActionDelegateHandler() != null) {
getActionDelegateHandler().handleThis(reason.getMessageId());
} else {
Log.e(TAG, "no action handler");
}
});
}
}
А вот мой тестовый класс.По сути, я хочу выполнить модульное тестирование myMethod (), в котором есть вызовы родительского класса Fragment 'isAdded () и getActivity ().Я хочу заглушить эти вызовы методов, но не могу.
@Test
public void testattempt() throws Exception {
MyTabFragment testFragment = PowerMockito.mock(MyTabFragment.class);
PowerMockito.doCallRealMethod().when(testFragment).myMethod(any(Parameter.class));
when(testFragment.isAdded()).thenReturn(true); //This line throws error
when(testFragment.getActivity()).thenReturn(fragmentActivity);
when(testFragment.getActionDelegateHandler()).thenReturn(null);
doAnswer(new Answer<Object>() {
@Override
public Object answer(InvocationOnMock invocation) throws Throwable {
Runnable runnable = (Runnable) invocation.getArguments()[0];
runnable.run();
return null;
}
}).when(fragmentActivity).runOnUiThread(any(Runnable.class));
testFragment.myMethod(mockParameter);
//asserts here...
//verify(testFragment).getActionDelegateHandler();
}
Запуск теста выдает ошибку в строке, где я высмеиваю вызов isAdded ().
org.mockito.exceptions.misusing.MissingMethodInvocationException:
when() requires an argument which has to be 'a method call on a mock'.
For example:
when(mock.getArticles()).thenReturn(articles);
Or 'a static method call on a prepared class`
For example:
@PrepareForTest( { StaticService.class })
TestClass{
public void testMethod(){
PowerMockito.mockStatic(StaticService.class);
when(StaticService.say()).thenReturn(expected);
}
}
Also, this error might show up because:
1. inside when() you don't call method on mock but on some other object.
2. inside when() you don't call static method, but class has not been prepared.
Как мне решить это.Я использую PowerMock.Любая помощь приветствуется.Спасибо