分析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。

目录
相关文章
|
23天前
|
存储 监控 Java
|
23天前
|
安全 Java 开发者
Swing 的线程安全分析
【8月更文挑战第22天】
30 4
|
23天前
|
Java 数据库连接 数据库
当线程中发生异常时的情况分析
【8月更文挑战第22天】
53 4
|
23天前
|
安全 Java 程序员
线程安全与 Vector 类的分析
【8月更文挑战第22天】
20 4
|
23天前
|
前端开发 测试技术 UED
【测试效率对比】深入分析:为何UI自动化测试的投资回报率通常低于接口自动化测试?
这篇文章深入分析了UI自动化测试与接口自动化测试的投资回报率(ROI)问题,指出UI自动化测试在某些情况下的ROI并不低,反驳了没有实施过UI自动化就轻易下结论的观点,并强调了实践的重要性和自动化测试在项目迭代中的作用。
44 1
|
29天前
|
存储 缓存 安全
深度剖析Java HashMap:源码分析、线程安全与最佳实践
深度剖析Java HashMap:源码分析、线程安全与最佳实践
|
1月前
|
消息中间件 安全 Kafka
"深入实践Kafka多线程Consumer:案例分析、实现方式、优缺点及高效数据处理策略"
【8月更文挑战第10天】Apache Kafka是一款高性能的分布式流处理平台,以高吞吐量和可扩展性著称。为提升数据处理效率,常采用多线程消费Kafka数据。本文通过电商订单系统的案例,探讨了多线程Consumer的实现方法及其利弊,并提供示例代码。案例展示了如何通过并行处理加快订单数据的处理速度,确保数据正确性和顺序性的同时最大化资源利用。多线程Consumer有两种主要模式:每线程一个实例和单实例多worker线程。前者简单易行但资源消耗较大;后者虽能解耦消息获取与处理,却增加了系统复杂度。通过合理设计,多线程Consumer能够有效支持高并发数据处理需求。
63 4
|
11天前
|
安全 Java API
Java线程池原理与锁机制分析
综上所述,Java线程池和锁机制是并发编程中极其重要的两个部分。线程池主要用于管理线程的生命周期和执行并发任务,而锁机制则用于保障线程安全和防止数据的并发错误。它们深入地结合在一起,成为Java高效并发编程实践中的关键要素。
8 0
|
1月前
|
C# 开发者 Windows
一款基于Fluent设计风格、现代化的WPF UI控件库
一款基于Fluent设计风格、现代化的WPF UI控件库
|
29天前
|
算法 安全 Java
深入解析Java多线程:源码级别的分析与实践
深入解析Java多线程:源码级别的分析与实践