CalledFromWrongThreadException realizando pruebas JUnit en Android
Soy nuevo en JUnit y Android y la documentación de prueba buena para trabajar con Android es difícil de encontrar.
Tengo un proyecto de prueba con clases que extienden ActivityInstrumentationTestCase2. Pruebas sencillas para examinar el estado de la GUI (lo que está habilitado, las posiciones relativas, etc) funcionan como se esperaba. Sin embargo, cuando intento realizar acciones de clic de botón, se produce la excepción de subproceso incorrecto. Alguien sabe cómo evitar este problema?
- ¿Por qué el Sonar no lee mis resultados de JUnit XML en Jenkins?
- org.junit cant 'ser resuelto en IntelliJ
- Tarea con el nombre 'testDebug' no se encuentra en el proyecto ': module'
- Prueba de unidad para EditTextView. ¿Cómo lo hago?
- qué prueba de unidad, en aplicaciones Android
Como un seguimiento, ¿alguien tiene alguna buena sugerencia de recursos gratuitos en la prueba o TDD para Android? Estoy usando Eclipse / MotoDev.
Gracias
Puedo obtener diferentes trazas de fallo dependiendo de cómo invoco cada botón, pero incluyendo uno aquí como referencia:
android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. at android.view.ViewRoot.checkThread(ViewRoot.java:2683) at android.view.ViewRoot.playSoundEffect(ViewRoot.java:2472) at android.view.View.playSoundEffect(View.java:8307) at android.view.View.performClick(View.java:2363) at com.android.tigerslair.demo1.test.GoTest.setUp(GoTest.java:49) at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169) at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154) at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:430) at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1447)
Aquí está la rutina simple de setup ():
@Override protected void setUp() throws Exception { super.setUp(); TigersLair activity=getActivity(); mGoBtn = (Button) activity.findViewById(R.id.go); mGoBtn.performClick(); }
No importa si realizo el clic en setUp () o la prueba real.
- Dos robotium caso de prueba, pero el segundo colgar no responde (en JUnit View)
- Cómo burlar getApplicationContext
- Prueba de respuestas reales de red con retroadaptación
- Prueba Android AsyncTask con Android Test Framework
- VerifyError al ejecutar jUnit Test en Android 1.6
- Excepción en el subproceso "main" java.lang.NoClassDefFoundError: junit / textui / ResultPrinter
- Prueba de unidad Actividad.startService () llamada?
- AndroidJUnit4.class + org.junit.Assume.assumeTrue = AssumptionViolatedException
Es necesario ejecutar todos los clics en el UIThread.
Esto se puede hacer con los siguientes dos ejemplos.
@UiThreadTest public void testApp() { TestApp activity = getActivity(); Button mGoBtn = (Button) activity.findViewById(R.id.testbutton); mGoBtn.performClick(); }
o
public void testApp2() throws Throwable { TestApp activity = getActivity(); final Button mGoBtn = (Button) activity.findViewById(R.id.testbutton); runTestOnUiThread(new Runnable() { @Override public void run() { mGoBtn.performClick(); } }); }
- Ejecutar tareas en backgound en NativeScript
- Contrato Android desarrollador izquierda, la necesidad de actualizar la aplicación sin el keystore original – es posible?