zoukankan      html  css  js  c++  java
  • Activity Test1

    源代码下载(免积分) 下载

    Acitivty測试的API的父类是InstrumentationTestCase。这个类可以获取Instrumentation。来操作Activity。


    对于activity測试,InstrumentationTestCase提供了以下三个功能:
    1. 生命周期的控制:使用Instrumentation,您能控制activity的生命周期

    2. Dependency injection:使用Instrumentation,你可以创建mock的系统对象。能帮助你控制測试环境

    3. UI交互:使用Instrumentation可以发送按键或者触屏事件

    InstrumentationTestCase測试Activity的基本的子类:

    1. ActivityInstrumentationTestCase2 :这个类用于一个或者多个activity的功能測试

    2. ActivityUnitTestCase:用于測试隔离的单个activity

    3. SingleLaunchActivityTestCase:这个类用于測试单个activity。比較少用。

    其它和Activity相关的类
            Mock 相关的类,ViewAsserts等。

    • ActivityInstrumentationTestCase2类的測试activity的功能

                    功能:在SendActivity中定义Button用于启动ReceiveActivity。并把EditText中的数据传递给ReceiveActivity

                    注意:假设使用的是真机时,首先要把锁屏解开。其次要把键盘调成英文输入。不然的话死的非常慘的,^_^

    1. 继承ActivityInstrumentationTestCase2
       public class SendeActivityFunTest extends
                      ActivityInstrumentationTestCase2<SendActivity> 
    2.添加构造方法,这是junit要求的。
        /*为了測试的应用可以正确的实例化,必须设置这个构造函数
         * test runner(InstrumentationTestRunner或者其子类)会调用构造函数去实例化測试类。
         */
        public SendeActivityFunTest() {
            /*android可以利用SendActivity.class和AndroidManifest.xml
             *中的instrumentation标签中的android:targetPackage属性可以获取要測试的类。
             */
            super(SendActivity.class);
            // TODO Auto-generated constructor stub
        }
    3. 添加setUp方法
    
    
        //setUp()方法在其它測试方法之前调用,主要是用于初始化变量和清楚曾经的測试。

    protected void setUp() throws Exception { // TODO Auto-generated method stub super.setUp(); //保存系统对象的引用 mSendActivity = getActivity(); sendButton = (Button) mSendActivity.findViewById(R.id.sendButton); mEditText = (EditText) mSendActivity.findViewById(R.id.editText); }

    4. 加入測试是否正确初始化的方法
    
    
        //验证初始化是否正确
        public void testPreconditions()
        {
            assertNotNull(mSendActivity);
            assertNotNull(sendButton);
            assertNotNull(mEditText);
        }
    5. 測试是否可以正确的启动ReceiveActivity。并获取正确的数据

        //測试是否可以引导ReceiveActivity。并传递的数据正确
        public void testSendMessageToReceiverActivity()
        {
            //创建ActivityMonitor去监听系统和ReceiverActivity的通信
            Instrumentation.ActivityMonitor activityMonitor = getInstrumentation()
                                .addMonitor(ReceiveActivity.class.getName(), null, false);
    
            /*在UI线程的測试要注意:
             * 创建一个Runnable的匿名内部类,并作为參数传递给runOnUiThread()
             * 
             */
            getInstrumentation().runOnMainSync(new Runnable() {
    
                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    //请求获取焦点
                    mEditText.requestFocus();
                }
            });
    
            //等待直到MainHandler中的事件都有被运行完
            getInstrumentation().waitForIdleSync();
    
            //发送字符串到EditText中
            getInstrumentation().sendStringSync(message);
            getInstrumentation().waitForIdleSync();
    
    
            /*TouchUtils:有非常多触摸事件,这些方法可以用在InstrumentationTestCase
             *和ActivityInstrumentationTestCase2上去模拟用户触摸屏幕。
             */
            TouchUtils.clickView(this, sendButton);
            //Block until an Activity is created that matches this monitor
            ReceiveActivity receiveActivity = (ReceiveActivity) activityMonitor
                                            .waitForActivityWithTimeout(TIME_OUT);
            assertNotNull("ReceiverActivity is null", receiveActivity);
            assertEquals("monitor for ReceiverActivity has not been called", 
                                                    1,activityMonitor.getHits());
    
            final TextView receivedMessage = (TextView) receiveActivity
                                                    .findViewById(R.id.textView);
            assertNotNull(receivedMessage);
            assertEquals("wrong received message ", message,
                                            receivedMessage.getText().toString());
            //移除activityMonitor
            getInstrumentation().removeMonitor(activityMonitor);
        }

    使用ActivityInstrumentationTestCase2通常的測试步骤是:

    1. 初始化的測试(此时setup方法中的变量)
    2. UI測试
    3. activity的状态管理的測试(主要用于測试生命周期)


    參考的资料:

          http://developer.android.com/training/activity-testing/index.html

          http://developer.android.com/tools/testing/activity_testing.html

          http://developer.android.com/tools/testing/activity_test.html






  • 相关阅读:
    K8s中Secrets
    记一次kubernetes配置secret拉取私仓镜像错误
    K8S中ConfigMap
    阿里云RDSforMySQL如何定位本地IP
    Python3运算符
    nyoj 67-三角形面积 (海伦公式, 叉积)
    nyoj 66-分数拆分 (Java,暴力)
    nyoj 65-另一种阶乘问题 (Java 高精度)
    nyoj 64-鸡兔同笼 (解二元一次方程)
    nyoj 63-小猴子下落 (模拟)
  • 原文地址:https://www.cnblogs.com/llguanli/p/8349949.html
Copyright © 2011-2022 走看看