分析SpinnerActivityTest中有关控件操作以及UI线程问题

简介: <p>首先说明,SpinnerActivityTest是官方给的单元测试sample.</p> <p><br></p> <p></p> <pre style="font-size:18px; word-wrap:break-word; text-align:left; background-color:rgb(255,255,255)"><span style="font-famil

首先说明,SpinnerActivityTest是官方给的单元测试sample.


继承自ActivityInstrumentationTestCase2进行activity测试。涉及到对控件的操作时比如处理动作,触屏和按键事件,和锁屏。,必须在mActivity.runOnUiThread()程序线程中
(或者在测试函数上添加@UiThreadTest,那么整个函数将在UI线程中运行),而不是在测试线程中
比如:
mActivity.runOnUiThread(
            new Runnable() {
                public void run() {
                    mSpinner.requestFocus();
                    mSpinner.setSelection(INITIAL_POSITION);
                }
            }
        );
比如:
@UiThreadTest
    public void testStatePause() {


        Instrumentation instr = this.getInstrumentation();
        mActivity.setSpinnerPosition(TEST_STATE_PAUSE_POSITION);
        mActivity.setSpinnerSelection(TEST_STATE_PAUSE_SELECTION);
	...
}

还有第三种方法,那就是直接通过Activity调用
比如:
mActivity.setSpinnerPosition(TEST_STATE_DESTROY_POSITION);
 mActivity.setSpinnerSelection(TEST_STATE_DESTROY_SELECTION);

为什么可以这样呢?
        /*
         * Set the position and value of the spinner in the Activity. The test runner's
         * instrumentation enables this by running the test app and the main app in the same
         * process.
         */
Also, instrumentation can load both a test package and the application under test into the same process. Since the application components and their tests are in the same process, the tests can invoke methods in the components, and modify and examine fields in the components.

可以看出Instrumentation和被测试的application是同进程的,Instrumentation可以让test app和被测试的app跑在同一个process.而getActivity()就是Instrumentation的方法,所以通过直接调用mActivity的setSpinner*方法,Instrumentation就会帮助你联通被测试的UI线程

注意:不与UI交互的方法不允许在UI线程中调用;例如,你不能触发Instrumentation.waitForIdleSync()或者sendkeys。

目录
相关文章
|
18小时前
线程CPU异常定位分析
【10月更文挑战第3天】 开发过程中会出现一些CPU异常升高的问题,想要定位到具体的位置就需要一系列的分析,记录一些分析手段。
7 0
|
21天前
|
并行计算 API 调度
探索Python中的并发编程:线程与进程的对比分析
【9月更文挑战第21天】本文深入探讨了Python中并发编程的核心概念,通过直观的代码示例和清晰的逻辑推理,引导读者理解线程与进程在解决并发问题时的不同应用场景。我们将从基础理论出发,逐步过渡到实际案例分析,旨在揭示Python并发模型的内在机制,并比较它们在执行效率、资源占用和适用场景方面的差异。文章不仅适合初学者构建并发编程的基础认识,同时也为有经验的开发者提供深度思考的视角。
|
2月前
|
存储 监控 Java
|
2月前
|
安全 Java 开发者
Swing 的线程安全分析
【8月更文挑战第22天】
40 4
|
2月前
|
Java 数据库连接 数据库
当线程中发生异常时的情况分析
【8月更文挑战第22天】
75 4
|
2月前
|
安全 Java 程序员
线程安全与 Vector 类的分析
【8月更文挑战第22天】
26 4
|
2月前
|
前端开发 测试技术 UED
【测试效率对比】深入分析:为何UI自动化测试的投资回报率通常低于接口自动化测试?
这篇文章深入分析了UI自动化测试与接口自动化测试的投资回报率(ROI)问题,指出UI自动化测试在某些情况下的ROI并不低,反驳了没有实施过UI自动化就轻易下结论的观点,并强调了实践的重要性和自动化测试在项目迭代中的作用。
63 1
|
2月前
|
存储 缓存 安全
深度剖析Java HashMap:源码分析、线程安全与最佳实践
深度剖析Java HashMap:源码分析、线程安全与最佳实践
|
1月前
|
安全 Java API
Java线程池原理与锁机制分析
综上所述,Java线程池和锁机制是并发编程中极其重要的两个部分。线程池主要用于管理线程的生命周期和执行并发任务,而锁机制则用于保障线程安全和防止数据的并发错误。它们深入地结合在一起,成为Java高效并发编程实践中的关键要素。
21 0
|
2月前
|
算法 安全 Java
深入解析Java多线程:源码级别的分析与实践
深入解析Java多线程:源码级别的分析与实践