Это однозначно дубликат другого вопроса на How to make mock to void methods with mockito. Есть и ряд похожих вопросов/ответов, но никто мне не помог. Поскольку сотни разработчиков приняли некоторые ответы, я, вероятно, ошибаюсь где-то и понятия не имею, где моя проблема!Как издеваться над методом void с помощью PowerMockito?
Это мой класс образцов, и я хочу протестировать его метод.
final class NavigationBuilder {
@VisibleForTesting List<Intent> mIntentList = new ArrayList<>(5);
@VisibleForTesting
void addNextScreenBasedOnBookingStatus(final Booking booking) {
final ChatMsgDbAsyncHelper helper = new ChatMsgDbAsyncHelper();
if (booking == null) {
helper.cleanAllMessages(mContext); // <= Crash here
}
}
}
Это мой тестовый класс:
@RunWith(PowerMockRunner.class)
@PrepareForTest({ChatMsgDbAsyncHelper.class, SplashActivity.class})
public class NavigationBuilderTest {
private SplashActivity mActivity;
private NavigationBuilder mNavBuilder;
@Before
public void setUp() throws Exception {
mActivity = new SplashActivity();
ISplashView view = mock(ISplashView.class);
PassengerStorage passengerStorage = mock(PassengerStorage.class);
mNavBuilder = new NavigationBuilder(mActivity, view, passengerStorage);
}
@Test
public void addNextScreenBasedOnBookingStatus_whenBookingIsNull() throws Exception {
ChatMsgDbAsyncHelper spy = PowerMockito.spy(new ChatMsgDbAsyncHelper());
PowerMockito.doNothing().when(spy).cleanAllMessages(mActivity);
mNavBuilder.addNextScreenBasedOnBookingStatus(null);
assertTrue(mNavBuilder.mIntentList.isEmpty());
}
}
Тест терпит неудачу и причина NullPointerException
, потому что тест работает логика внутри helper.cleanAllMessages(mContext);
. Мое ожидание от насмешнего заключается в том, что логика не должна выполняться.
Вызванный:. Java.lang.NullPointerException на com.xxx.xxx.db.entities.ChatMessageTable (ChatMessageTable.java:23)
Таким образом, любая помощь будет оценена. Благодарю.
Спасибо за ваш комментарий. Да, я действительно видел подобный ответ в этой ссылке и не получил того, что ожидал после тестирования на основе этого подхода. Я не знаю, почему, но не работал, и я получил аналогичную информацию, о которой я упомянул в своем вопросе. – Hesam