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?

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.

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(); } }); } 
  • Prueba de unidad Android, getString del recurso
  • Probar rutinas de procesamiento de imágenes con robolectric
  • Error al resolver: Error: (23, 17) junit: junit: 4.12 en android studio 1.4
  • Excepción de tiempo de ejecución en las pruebas de Android JUnit
  • ¿Es posible entrar en el modo de depuración para android cuando se ejecuta junit test?
  • Excepción en el subproceso "main" java.lang.NoClassDefFoundError: junit / textui / ResultPrinter Después de actualizar a Yosemite
  • Akquinet (Android con el arquetipo de prueba) - las pruebas de unidad no se ejecutan
  • Cualquier forma de obtener una referencia para los elementos de la barra de Acción para Junit pruebas en android?
  • ¿Cómo puedo ejecutar el código en el hilo de la interfaz de usuario en una prueba de Android JUnit sin una actividad?
  • Cómo probar interfaz de escucha se llama dentro de pruebas de unidad de Android
  • VerifyError con Mockito 1.9.5 y DexMaker-Mockito-1.0
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.