2011-11-05 9 views
15

soy muy nuevo en Android y escribo algunas pruebas Android básicas usando Robotium y esto falla con excepción comoLa prueba de Android Junit falla con "Solo el hilo original que creó una jerarquía de vistas puede tocar sus vistas".

"android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views." 

A continuación se muestra la decription caso_prueba básica: -

caso de prueba: -

public void testSearch() { 
         Activity a = getActivity(); 
      SearchItemActivity search = new SearchItemActivity(solo); 
      search.searchText("ipod", a); 

    } 

SearchItemActivity.searchText(String) is defined as 

    public void searchText(final String search, Activity act) { 
       Button v = (Button) act 
       .findViewById(com.test.mobile.R.id.text_search_field); 
       ((Button) v).setText(""); 
       ((Button) v).setText(search); 
       solo.sendKey(Solo.ENTER); 
       solo.waitForActivity("FoundItemdDetailActivity"); 
       solo.assertCurrentActivity("Expected FoundItemDetail activity","FoundItemdDetailActivity"); 
    } 

Cualquier sugerencia de cómo puedo modificar mi código se apreciará

+0

supongo que es porque sus casos de prueba intentan descartar la pantalla de bloqueo http://stackoverflow.com/questions/4545079/lock-the-android-device-programatically/10535284#10535284 –

Respuesta

24
@UiThreadTest 
public void yourMethod() { 

La anotación @UiThreadTest le dice a Android que cree este método para que se ejecute en el subproceso de la interfaz de usuario. Esto permite que el método cambie el estado del widget giratorio en la aplicación bajo prueba. Este uso de @UiThreadTest muestra que, si es necesario, puede ejecutar un método completo en el hilo de la interfaz de usuario.

http://developer.android.com/tools/testing/activity_test.html

6

Creo que se está intentando actualizar la interfaz de usuario de un hilo no interfaz de usuario. Entonces para eso necesitas poner tu código dentro del runOnUiThread().

ActivityName.this.runOnUiThread(new Runnable() { 

      public void run() { 
       // your code to update the UI 
      } 
     }); 
Cuestiones relacionadas