Estoy tratando de probar dos clases Activity
diferentes, donde una Activity
pasa a llamar a la otra. Aquí está mi código y luego voy a explicar el problema:metodo getActivity() bloqueando indefinidamente mientras prueba la unidad
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"));
}
}
En IntroActivityTest
, si el token de usuario de SharedPreferences
no es nulo, se inicia inmediatamente RootActivity
. Si es nulo, permanece en IntroActivity
. El problema es que si no es nulo, pasa la primera prueba (IntroActivityTest
), y luego se cuelga en la llamada al método getActivity()
en RootActivityTest
y la prueba simplemente se congela ... sin excepciones, simplemente se cuelga en esa línea. Si el token de usuario es nulo, ejecuta ambas pruebas completamente bien.
¿Qué podría estar causando esto? Por observación, parece que RootActivityTest
está intentando usar el RootActivity
que se inició desde IntroActivity
, pero ¿no debería estar comenzando su propia instancia de RootActivity
?
¡Excelente respuesta! En mi caso, necesitaba configurar mi monitor _antes_ llamé 'getActivity()' porque mi 'Activity' nueva comenzaba en' onCreate() '. –