2011-11-05 13 views
15

Sono molto nuovo per Android e sto scrivendo alcuni test Android di base utilizzando Robotium e questo viene a mancare con l'eccezione comeIl test Android Junit ha esito negativo con "Solo il thread originale che ha creato una gerarchia di viste può toccare le sue viste".

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

riportano di seguito le decription base TestCase: -

TestCase: -

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"); 
    } 

Eventuali suggerimenti come posso modificare il mio codice saranno appreciatated

+0

Credo che sia perché i casi di test provano a chiudere la schermata di blocco http://stackoverflow.com/questions/4545079/lock-the-android-device-programatically/10535284#10535284 –

risposta

24
@UiThreadTest 
public void yourMethod() { 

L'annotazione @UiThreadTest indica a Android di creare questo metodo in modo che venga eseguito sul thread dell'interfaccia utente. Ciò consente al metodo di modificare lo stato del widget spinner nell'applicazione sottoposta a test. Questo uso di @UiThreadTest mostra che, se necessario, è possibile eseguire un intero metodo sul thread dell'interfaccia utente.

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

6

Credo che si sta tentando di aggiornare l'interfaccia utente da un thread non-UI. Quindi per questo è necessario inserire il codice all'interno dello runOnUiThread().

ActivityName.this.runOnUiThread(new Runnable() { 

      public void run() { 
       // your code to update the UI 
      } 
     }); 
Problemi correlati