java - 使用 @UiThreadTest 注解查看测试 setUp() 方法中的异常

标签 java android unit-testing android-instrumentation

我遇到了一个问题,我试图更改 setUp() 方法中的 UI。

public class DrawerRootActivityTest extends android.test.ActivityInstrumentationTestCase2<DrawerRootActivity> {

    @UiThreadTest
    @Override
    protected void setUp() throws Exception {
        super.setUp();
        rootActivity = (DrawerRootActivity) getActivity();
        cf = rootActivity.calculatorFragment;
        cf.changeDigitDisplay(2); // Line 29
    }

}

这是测试控制台:

Running tests
Test running started
android.view.ViewRootImpl$CalledFromWrongThreadException: 
    Only the original thread that created a view hierarchy can touch its views.
at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6024)
at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:853)
at android.view.ViewGroup.invalidateChild(ViewGroup.java:4320)
at android.view.View.invalidate(View.java:10935)
at android.view.View.invalidate(View.java:10890)
...
com.mydomain.myapp.DrawerRootActivityTest.setUp(DrawerRootActivityTest.java:29)

我需要在 setUp() 方法中对我的应用程序进行一些更改,这会触发更新 UI 的副作用。我认为添加 @UiThreadTest 注释 会导致它在主 ui 线程上运行。

我应该以不同的方式做到这一点吗?

最佳答案

试试这个:

protected void setUp() throws Exception {
    super.setUp();
    rootActivity = (DrawerRootActivity) getActivity();
    rootActivity.runOnUiThread(new Runnable() {
        @Override
        public void run() {
            cf = rootActivity.calculatorFragment;
            cf.changeDigitDisplay(2); // Line 29
            }
    });
}

关于java - 使用 @UiThreadTest 注解查看测试 setUp() 方法中的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31066096/

相关文章:

ajax - 如何让selenium等待ajax响应?

java - 在Java中对阿拉伯语单词进行排序

java - 在测试中迭代所有 Play Framework 路由

java - 无法使用 JComboBoxes 更改 JTextArea 中的字体和字体大小

android - 不同版本号gradle文件

django - 测试使用 cookies/session 的 django 网络应用程序

java - 一致的跨平台 (java .Net) PseudoRandom 生成器,如果种子相同

c++ - Android:静态链接到 libstdc++

java - 如何从这个 JSONString 解析?

java - 如何在 Maven 构建过程中调用 ruby​​ 脚本?