【问题标题】:android.view.ViewRootImpl$CalledFromWrongThreadException in Test Class测试类中的 android.view.ViewRootImpl$CalledFromWrongThreadException
【发布时间】:2015-11-19 18:04:06
【问题描述】:

我正在为一个 android 应用程序开发一个测试类,我得到一个 android.view.ViewRootImpl$CalledFromWrongThreadException。该代码假设模拟输入到文本字段中。当调用语句searchText.setText("hi"); 时,方法testSearch() 中会抛出此异常。我不知道为什么会这样,我想修复它。代码如下:

package com.example.guy.smsclassproject;

import android.test.ActivityInstrumentationTestCase2;
import android.test.suitebuilder.annotation.SmallTest;
import android.widget.Button;
import android.widget.EditText;

import java.util.ArrayList;

/**
 * Created by Guy on 11/16/2015.
 */
public class DraftsActivityTest2 extends ActivityInstrumentationTestCase2<DraftsActivity>
{
    private EditText searchText;
    private Button searchButton;
    private DraftsDatabase draftsDatabase;
    ArrayList<MessageObject> messagesToBeDisplayed;
    DraftsActivity tester;
public DraftsActivityTest2()
{
    super(DraftsActivity.class);
}

@Override
public void setUp() throws Exception
{
    draftsDatabase = new DraftsDatabase();
    MessageObject messageObject1 = new MessageObject("hi", "5554", true);
    MessageObject messageObject2 = new MessageObject("hi hi", "5555554", true);
    MessageObject messageObject3 = new MessageObject("sup", "5435555554", true);
    draftsDatabase.addMessage(messageObject1);
    draftsDatabase.addMessage(messageObject2);
    draftsDatabase.addMessage(messageObject3);
    messagesToBeDisplayed = draftsDatabase.getAllTexts();
    tester = getActivity();
    messagesToBeDisplayed = tester.messagesToBeDisplayed;
    searchText = (EditText) tester.findViewById(R.id.searchText);
    searchButton = (Button) tester.findViewById(R.id.searchButton);
}

@SmallTest
public void testSearch() {
    //The problem occurs here:
    searchText.setText("hi");
    searchButton.performClick();
    messagesToBeDisplayed = draftsDatabase.getMessagesByKey(searchText.getText().toString());
    assertEquals("Messages with the word hi", 2, messagesToBeDisplayed.size());

}

}

【问题讨论】:

    标签: android multithreading exception testing view


    【解决方案1】:

    问题是您只能从主 UI 线程修改小部件... 您可以尝试将UiThreadTest 注释添加到testSearch,这将使其在主线程中运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多