Тест 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
}
});