Тест Android Junit завершился неудачей: "Только исходный поток, создавший иерархию представлений, может коснуться его представлений".

Я очень новичок в Android и пишу некоторые базовые тесты для Android с помощью Robotium, и это происходит с ошибкой, поскольку

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

Ниже приведено основное определение сценария: -

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

Любые предложения, как я могу изменить свой код, будут оценены

Ответы

Ответ 1

@UiThreadTest
public void yourMethod() {

Аннота @UiThreadTest сообщает Android о создании этого метода, чтобы он работал в потоке пользовательского интерфейса. Это позволяет способу изменить состояние виджнера spinner в тестируемом приложении. Это использование @UiThreadTest показывает, что при необходимости вы можете запустить весь метод в потоке пользовательского интерфейса.

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

Ответ 2

Я предполагаю, что вы пытаетесь обновить пользовательский интерфейс из потока, отличного от UI. Поэтому для этого вам нужно поместить свой код внутри runOnUiThread().

ActivityName.this.runOnUiThread(new Runnable() {

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