Dies ist zweifelsfrei Duplikat einer anderen gleichen Frage bei How to make mock to void methods with mockito. Es gibt eine Menge ähnlicher Fragen/Antworten, aber keine hat mir geholfen. Da Hunderte von Entwicklern einige Antworten angenommen haben, bin ich wahrscheinlich irgendwo falsch und habe keine Ahnung, wo mein Problem ist!Wie man eine ungültige Methode mit PowerMockito vortäuscht?
Dies ist meine Beispielklasse und ich möchte ihre Methode testen.
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
}
}
}
Dies ist mein Test-Klasse:
@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());
}
}
-Test schlägt fehl, und der Grund ist, weil NullPointerException
Testlogik innerhalb von helper.cleanAllMessages(mContext);
läuft. Meine Erwartung von oben ist, dass diese Logik nicht ausgeführt werden sollte.
Verursacht durch:. Java.lang.NullPointerException bei com.xxx.xxx.db.entities.ChatMessageTable (ChatMessageTable.java:23)
So würde jede Hilfe dankbar. Vielen Dank.
Vielen Dank für Ihren Kommentar. Yup, ich habe tatsächlich eine ähnliche Antwort in diesem Link gesehen und nicht bekommen, was ich nach dem Testen erwartet habe, basierend auf diesem Ansatz. Ich weiß nicht warum, aber hat nicht funktioniert, und ich habe ähnliche Ergebnisse, die ich in meiner Frage erwähnt habe. – Hesam