這是在How to make mock to void methods with mockito的另一個相同的問題的複製副本。還有一堆類似的問題/答案,但沒有人幫助我。由於有數百名開發人員接受了一些答案,我可能在某處出錯,不知道我的問題在哪裏!如何使用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