2010-01-18 103 views
3

我是JUnit和Android的新手,很難找到用於Android的良好測試文檔。CalledFromWrongThreadException在Android上執行JUnit測試

我有一個擴展ActivityInstrumentationTestCase2類的測試項目。簡單的測試來檢查GUI的狀態(啓用的功能,相對位置等)按預期工作。但是,當我嘗試執行按鈕單擊操作時,會拋出錯誤的線程異常。任何人都知道如何解決這個問題?

作爲一個後續,有沒有人有任何測試或TDD Android的免費資源的好建議?我正在使用Eclipse/MotoDev。

感謝

我可以根據我如何調用每個按鈕不同失敗的痕跡,但包括一個在這裏以供參考:

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) 

下面是簡單的設置()函數:

@Override 
protected void setUp() throws Exception { 
    super.setUp(); 
    TigersLair activity=getActivity(); 

    mGoBtn = (Button) activity.findViewById(R.id.go); 
    mGoBtn.performClick();   
} 

無論我在setUp()還是實際測試中執行單擊都沒關係。

回答

7

您需要執行UIThread中的所有點擊操作。

這可以通過以下兩個例子完成。

@UiThreadTest 
public void testApp() { 
    TestApp activity = getActivity(); 

    Button mGoBtn = (Button) activity.findViewById(R.id.testbutton); 
    mGoBtn.performClick(); 
} 

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(); 
    } 
    }); 
} 
相關問題