Ich möchte eine Methode meiner Klasse mit Mockito testen.Gespiegelte Methode gibt keinen erwarteten Wert zurück
public class SplashPresenter {
public volatile State mField1 = State.DEFAULT;
public volatile State mField2 = State.DEFAULT;
boolean stateFlagsAreAllCompleted(@NonNull final ISplashView view) {
if (mField1 == State.COMPLETE //
&& mField2 == State.COMPLETE) {
// Check Forced Update
final int updateCheckResult = checkForcedUpdate(); // <===
if (updateCheckResult == MyConstants.PRODUCTION_UPDATE_AVAILABLE) {
view.displayForcedUpdateAlert(false);
return true;
}
if (updateCheckResult == MyConstants.BETA_UPDATE_AVAILABLE) {
view.displayForcedUpdateAlert(true);
return true;
}
view.restartLoader();
// Move to the home screen
return true;
}
return false;
}
int checkForcedUpdate() {
...... // my codes
}
}
und das ist mein Test-Klasse:
public class SplashPresenterTest_ForStateFlags {
private Context mContext;
private ISplashView mView;
@Before
public void setUp() throws Exception {
mContext = Mockito.mock(Context.class);
mView = Mockito.mock(ISplashView.class);
}
@Test
public void stateFlagsAreAllCompleted() throws Exception {
SplashPresenter presenter = Mockito.mock(SplashPresenter.class);
presenter.mField1 = State.COMPLETE;
presenter.mField2 = State.COMPLETE;
when(presenter.checkForcedUpdate()).thenReturn(1);
boolean actual = presenter.stateFlagsAreAllCompleted(mView);
System.out.println("actual: " + actual + ", " +
presenter.mField1 + ", " +
presenter.checkForcedUpdate());
assertTrue(actual);
}
}
Test-Versagen ist das, was am Ende passiert :(Dies ist die Ausgabe:
tatsächlich: false, COMPLETE, 1
Die Sache, die ich nicht verstehe, ist sogar ich ändere die stateFlagsAreAllCompleted
Methode zu foll Ausfallscode scheitert dann noch Test mit obiger Ausgabe.
boolean stateFlagsAreAllCompleted(@NonNull final ISplashView view) {
return true;
}
So würde jede Empfehlung geschätzt werden. Vielen Dank.
Eigentlich möchte ich die Ausgabe von 'stateFlagsAreAllComplete()' basierend auf verschiedenen Bedingungen (die innerhalb der Methode entworfen haben) testen. Auf diese Weise kann ich die Ausgabe nicht bewerten. – Hesam
Ich sehe das Problem jetzt - Sie verspotten die Klasse, deren Methode Sie testen. Sie sollten die zu testende Klasse nicht verspotten (vereitelt den Zweck des Testens). Sie sollten nur Abhängigkeiten vortäuschen. Erstellen Sie eine Instanz der Klasse und testen Sie sie anschließend. Ich aktualisiere meine Antwort – ucsunil
ah, das wusste ich nicht. Danke für deine Antwort. – Hesam