2011-11-05 6 views
15

私は、Androidに非常に新しいですし、Robotiumを使用していくつかの基本的なAndroidのテストを書いていますし、これは以下 AndroidのJunitテストは「ビュー階層を作成した元のスレッドのみがそのビューに触れることができます」と失敗します。

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

は、基本的なテストケースdecriptionあるとして例外で失敗: -

テストケース: -

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

私のコードを変更する方法を教えてください。

+0

私はあなたのテストケースは、ロック画面http://stackoverflow.com/questions/4545079/lock-the-android-device-programatically/10535284#10535284を解任しようとするので、それはだと思います –

答えて

24
​​

@UiThreadTestアノテーションは、このメソッドを構築してUIスレッド上で実行するようにAndroidに指示します。これにより、メソッドはテスト中のアプリケーション内のスピナーウィジェットの状態を変更することができます。 @UiThreadTestを使用すると、必要に応じてUIスレッドでメソッド全体を実行できます。

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

6

私はあなたが非UIスレッドからUIを更新しようとしていると思います。だからあなたのコードをrunOnUiThread()の中に入れておく必要があります。

ActivityName.this.runOnUiThread(new Runnable() { 

      public void run() { 
       // your code to update the UI 
      } 
     }); 
関連する問題