zoukankan      html  css  js  c++  java
  • 关于Android使用Instrumentation做功能测试的时候遇到的一个问题

    最近在看测试方面的东西,看到官网上有一个使用Instrumentation做功能测试的例子,自己敲了敲,但是在自己的手机上就是测不过。

    经过调试,我发现是我手机上的输入法把输入事件拦截了,需要多输入一些空格给输入法,让它来把字符填入EditText中才行。

    这件事再次印证了android中事件传播的机制,keyevent先传递给当前上下文,然后分发给窗体实例,然后是输入法,接着发给父VIEW,一层层的发往焦点控件

                         touchevent则是反过来的

    下面是我的测试代码,有三个类,Lesson3,Lesson3start,lesson3test

    Lesson3.java

    package com.example.u3.testpractice;
    
    import android.app.Activity;
    import android.content.Context;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.view.inputmethod.InputMethodManager;
    import android.widget.Button;
    import android.widget.EditText;
    
    /**
     * Created by U3 on 2015/4/11.
     */
    public class Lesson3 extends Activity  {
        private final String exString = "hi, unit test";
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.lesson3layout);
            Button mButton = (Button)findViewById(R.id.bt_lesson3);
            Button mButton2 = (Button)findViewById(R.id.bt_lesson3_2);
            final EditText mEditText = (EditText)findViewById(R.id.et_edittext);
            mButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent mIntent = new Intent(Lesson3.this,Lesson3start.class);
                    mIntent.putExtra("ExString",exString);
                    startActivity(mIntent);
                    finish();
                }
            });
            mButton2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent mIntent = new Intent(Lesson3.this,Lesson3start.class);
                    final String msg  = mEditText.getText().toString();
                    mIntent.putExtra("ExString",msg);
                    startActivity(mIntent);
                    finish();
                }
            });
    
        }
    }
    //该类代码很简单,不做过多说明

    lesson3start.java

    public class Lesson3start extends Activity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.lesson3layout);
    
            TextView mTextView = (TextView)findViewById(R.id.tv_lesson3);
            String exString = getIntent().getStringExtra("ExString");
            mTextView.setText(exString);
        }
    }

    下面是最关键的测试类代码,lesson3test2.java

    public class Lesson3Test2 extends ActivityInstrumentationTestCase2<Lesson3> {
        private Lesson3 lesson3test;
        private  Lesson3start lesson3start;
        private static final String TEXT_MSG1 = "hello receiver";
        private static final String TEXT_MSG2 = "helloreceiver";
        public Lesson3Test2() {
            super(Lesson3.class);
        }
    
        @Override
        protected void setUp() throws Exception {
            super.setUp();
            setActivityInitialTouchMode(true);//设置触摸模式
            lesson3test = getActivity();//得到activity
        }
    
        public void testPrecondition() {
            assertNotNull("Activity is not run", lesson3test);
        }
    
        public void testSendandRecive_Text() {
            final Button mButton = (Button) lesson3test.findViewById(R.id.bt_lesson3_2);
            final EditText mEditText = (EditText) lesson3test.findViewById(R.id.et_edittext);
            Instrumentation.ActivityMonitor reciveMonitor = getInstrumentation().addMonitor(Lesson3start.class.getName(), null, false);//设置monitor检测activity
            getInstrumentation().runOnMainSync(new Runnable() {
                @Override
                public void run() {
                    mEditText.requestFocus();//主线程获得焦点
                }
            });
            getInstrumentation().waitForIdleSync();//等待主线程完成操作
            getInstrumentation().sendStringSync(TEXT_MSG1+" ");//输入String
            getInstrumentation().waitForIdleSync();//等待
            TouchUtils.clickView(this,mButton);//模拟点击按钮
            lesson3start = (Lesson3start)reciveMonitor.waitForActivityWithTimeout(1000);
            assertNotNull("not start activity",lesson3start);
            assertEquals("moniter not hit",1,reciveMonitor.getHits());
            assertEquals("wrong class to start",Lesson3start.class,lesson3start.getClass());
            final TextView testText = (TextView)lesson3start.findViewById(R.id.tv_lesson3);
    
            assertEquals("wrong text to send",TEXT_MSG2,testText.getText());//测试结果
        }
    
    }
  • 相关阅读:
    BZOJ 2034 【2009国家集训队】 最大收益
    vijos P1780 【NOIP2012】 开车旅行
    BZOJ 2115 【WC2011】 Xor
    BZOJ 3631 【JLOI2014】 松鼠的新家
    BZOJ 4717 改装
    BZOJ 2957 楼房重建
    BZOJ 4034 【HAOI2015】 T2
    BZOJ 1834 【ZJOI2010】 network 网络扩容
    BZOJ 2440 【中山市选2011】 完全平方数
    BZOJ 2733 【HNOI2012】 永无乡
  • 原文地址:https://www.cnblogs.com/u3shadow/p/4419333.html
Copyright © 2011-2022 走看看