Sto provando a testare due diverse classi Activity
, in cui uno si trova a chiamare Activity
. Ecco il mio codice e poi vi spiego il problema:metodo getActivity() blocco a tempo indeterminato durante il test dell'unità
IntroActivityTest
public class IntroActivityTest extends ActivityInstrumentationTestCase2<IntroActivity> {
IntroActivity activity;
public IntroActivityTest() {
super(IntroActivity.class);
}
@Override
protected void setUp() throws Exception {
super.setUp();
activity = getActivity();
}
public void testIntroBypass() {
if (new SharedPreferencesHelper(getInstrumentation().getTargetContext()).retrieveUserToken() == null) {
assertTrue(!activity.isFinishing());
}
else {
assertTrue(activity.isFinishing());
}
}
}
RootActivityTest:
public class RootActivityTest extends ActivityInstrumentationTestCase2<RootActivity> {
RootActivity activity;
public RootActivityTest() {
super(RootActivity.class);
}
@Override
protected void setUp() throws Exception {
super.setUp();
activity = getActivity();
}
public void testInitialTab() {
assertTrue(activity.getSupportActionBar().getSelectedTab().getText().toString().equalsIgnoreCase("Library"));
}
}
In IntroActivityTest
, se il token utente SharedPreferences
non è nullo, si inizia subito RootActivity
. Se è nullo, rimane su IntroActivity
. Il problema è che se non è nullo, passa il primo test (IntroActivityTest
), quindi si blocca sulla chiamata del metodo getActivity()
in RootActivityTest
e il test si blocca solo ... senza eccezioni, si blocca su quella riga. Se il token utente è nullo, esegue entrambi i test completamente bene.
Cosa potrebbe causare questo? Dall'osservazione, sembra che RootActivityTest
stia tentando di utilizzare RootActivity
avviato da IntroActivity
, ma non dovrebbe iniziare la propria istanza di RootActivity
?
Ottima risposta! Nel mio caso, avevo bisogno di impostare il mio monitor _prima_ ho chiamato 'getActivity()' perché il mio nuovo 'Activity' stava iniziando in' onCreate() '. –