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

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

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

                     touchevent则是反过来的

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

Lesson3.java

  1. package com.example.u3.testpractice;
  2.  
  3. import android.app.Activity;
  4. import android.content.Context;
  5. import android.content.Intent;
  6. import android.os.Bundle;
  7. import android.view.View;
  8. import android.view.inputmethod.InputMethodManager;
  9. import android.widget.Button;
  10. import android.widget.EditText;
  11.  
  12. /**
  13. * Created by U3 on 2015/4/11.
  14. */
  15. public class Lesson3 extends Activity {
  16. private final String exString = "hi, unit test";
  17. @Override
  18. protected void onCreate(Bundle savedInstanceState) {
  19. super.onCreate(savedInstanceState);
  20. setContentView(R.layout.lesson3layout);
  21. Button mButton = (Button)findViewById(R.id.bt_lesson3);
  22. Button mButton2 = (Button)findViewById(R.id.bt_lesson3_2);
  23. final EditText mEditText = (EditText)findViewById(R.id.et_edittext);
  24. mButton.setOnClickListener(new View.OnClickListener() {
  25. @Override
  26. public void onClick(View v) {
  27. Intent mIntent = new Intent(Lesson3.this,Lesson3start.class);
  28. mIntent.putExtra("ExString",exString);
  29. startActivity(mIntent);
  30. finish();
  31. }
  32. });
  33. mButton2.setOnClickListener(new View.OnClickListener() {
  34. @Override
  35. public void onClick(View v) {
  36. Intent mIntent = new Intent(Lesson3.this,Lesson3start.class);
  37. final String msg = mEditText.getText().toString();
  38. mIntent.putExtra("ExString",msg);
  39. startActivity(mIntent);
  40. finish();
  41. }
  42. });
  43.  
  44. }
  45. }
  46. //该类代码很简单,不做过多说明

lesson3start.java

  1. public class Lesson3start extends Activity {
  2. @Override
  3. protected void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. setContentView(R.layout.lesson3layout);
  6.  
  7. TextView mTextView = (TextView)findViewById(R.id.tv_lesson3);
  8. String exString = getIntent().getStringExtra("ExString");
  9. mTextView.setText(exString);
  10. }
  11. }

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

  1. public class Lesson3Test2 extends ActivityInstrumentationTestCase2<Lesson3> {
  2. private Lesson3 lesson3test;
  3. private Lesson3start lesson3start;
  4. private static final String TEXT_MSG1 = "hello receiver";
  5. private static final String TEXT_MSG2 = "helloreceiver";
  6. public Lesson3Test2() {
  7. super(Lesson3.class);
  8. }
  9.  
  10. @Override
  11. protected void setUp() throws Exception {
  12. super.setUp();
  13. setActivityInitialTouchMode(true);//设置触摸模式
  14. lesson3test = getActivity();//得到activity
  15. }
  16.  
  17. public void testPrecondition() {
  18. assertNotNull("Activity is not run", lesson3test);
  19. }
  20.  
  21. public void testSendandRecive_Text() {
  22. final Button mButton = (Button) lesson3test.findViewById(R.id.bt_lesson3_2);
  23. final EditText mEditText = (EditText) lesson3test.findViewById(R.id.et_edittext);
  24. Instrumentation.ActivityMonitor reciveMonitor = getInstrumentation().addMonitor(Lesson3start.class.getName(), null, false);//设置monitor检测activity
  25. getInstrumentation().runOnMainSync(new Runnable() {
  26. @Override
  27. public void run() {
  28. mEditText.requestFocus();//主线程获得焦点
  29. }
  30. });
  31. getInstrumentation().waitForIdleSync();//等待主线程完成操作
  32. getInstrumentation().sendStringSync(TEXT_MSG1+" ");//输入String
  33. getInstrumentation().waitForIdleSync();//等待
  34. TouchUtils.clickView(this,mButton);//模拟点击按钮
  35. lesson3start = (Lesson3start)reciveMonitor.waitForActivityWithTimeout(1000);
  36. assertNotNull("not start activity",lesson3start);
  37. assertEquals("moniter not hit",1,reciveMonitor.getHits());
  38. assertEquals("wrong class to start",Lesson3start.class,lesson3start.getClass());
  39. final TextView testText = (TextView)lesson3start.findViewById(R.id.tv_lesson3);
  40.  
  41. assertEquals("wrong text to send",TEXT_MSG2,testText.getText());//测试结果
  42. }
  43.  
  44. }

关于Android使用Instrumentation做功能测试的时候遇到的一个问题的更多相关文章

  1. Xamarin android使用Sqlite做本地存储数据库

    android使用Sqlite做本地存储非常常见(打个比方就像是浏览器要做本地存储使用LocalStorage,貌似不是很恰当,大概就是这个意思). SQLite 是一个软件库,实现了自给自足的.无服 ...

  2. Android 使用ViewPager 做的半吊子的图片轮播

    Android 使用ViewPager 做的半吊子的图片轮播 效果图 虽然不咋样,但是最起码的功能是实现了,下面我们来一步步的实现它. 界面 下面我们来分析一下界面的构成 整体的布局: 因为我们要做出 ...

  3. Android中可以做的两件坏事——破解锁屏密码和获取Wifi密码

    来源:http://blog.csdn.net/jiangwei0910410003/article/details/41800409 今天咋们来看一下我在现实中遇到的两个问题和解决方案 问题一:忘记 ...

  4. (Android+IOS)正在做一个新闻App,做的差不多了,听听大家的建议 (图)

    (Android+IOS)正在做一个新闻App,做的差不多了,听听大家的建议! 新闻采集器做好了,前端展示APP界面感觉还不是很好,还需要改进改进,希望发布(Android和IOS版本)前听听大家的建 ...

  5. Struts2 用过滤器代替了 servlet ,???? 且不需要tomcat就可以直接做功能测试

    Struts2  用过滤器代替了 servlet ,????  且不需要tomcat就可以直接做功能测试

  6. 【转】Jmeter做功能测试的优点和不足

    利用Jmeter做功能测试有以下优点: ●    不依赖于界面,如果服务正常启动,传递参数明确就可以添加测试用例,执行测试 ●    测试脚本不需要编程,熟悉http请求,熟悉业务流程,就可以根据页面 ...

  7. Cordova Android项目如何做代码混淆

    我想修改build.gradle配置 可是这个文件明确写了// GENERATED FILE! DO NOT EDIT!可是还是试了试: if (cdvReleaseSigningProperties ...

  8. Android中可以做的两件坏事---破解锁屏密码和获取Wifi密码

    之前的文章一直在介绍OC,最近也是在找急忙慌的学习IOS,所以Android方面的知识分享就有点中断了,但是我现在还是要靠Android吃饭,所以不能Android的工作不能停呀,今天咋们来看一下我在 ...

  9. Android(java)学习笔记219:开发一个多界面的应用程序之两种意图

    1.两种意图: (1)显式意图: 在代码里面用intent设置要开启Activity的字节码.class文件: (2)隐式意图: Android(java)学习笔记218:开发一个多界面的应用程序之人 ...

随机推荐

  1. Javascript+CSS实现影像卷帘效果

    用过Arcgis的筒子们对于Arcmap里面的一个卷帘效果肯定记忆很深刻,想把它搬到自己的WebGIS系统中去,抱着同样的想法,我也对这种比较炫的卷帘效果做了一下研究,吼吼,出来了,给大家汇报一下成果 ...

  2. UVALive 6163(暴力枚举)

    这道题我的做法就是枚举这四个数的所有排列所有运算所有计算顺序. 略有考验代码能力,不能漏掉情况,注意模块化的思想,一些功能写成函数调试的时候结构清晰好分析. 比赛时没有AC是对next_permuta ...

  3. 如何突破 Java 程序员的分水岭

    第一阶段:一年之内的 JAVA 从业人员 这个阶段是你成长极快的阶段,而且你可能会经常加班.但是加班不代表你就可以松懈了,永远记得我说的那句话,从你入行那一刻起,你就要不停的学习.在这一年里,你至少需 ...

  4. LeNet-5网络结构及训练参数计算

    经典神经网络诞生记: 1.LeNet,1998年 2.AlexNet,2012年 3.ZF-net,2013年 4.GoogleNet,2014年 5.VGG,2014年 6.ResNet,201 ...

  5. Ubuntu下安装为知笔记

    之前在Windows下用的是有道云笔记,但是后来开始习惯使用Linux开发,有道云官方并没有提供Ubuntu的版本,所以权衡之下,选择了为知笔记,安装步骤: sudo add-apt-reposito ...

  6. POJ 2029 Palindromes _easy version

    #include<cstdio> #include<cstring> using namespace std; int main() { int n; ]; scanf(&qu ...

  7. 深入了解ZooKeeper(一)

    在上篇博客ZooKeeper初探之安装和配置中已经对Zookeeper这个“服务协调者”有了初步的认识和了解,一个字“美”,接下来开始深入的交往,开始了解其内心世界! 1. 内容思维导图 2. 分布式 ...

  8. JAMstack 最佳实践

    摘自官方介绍,没有翻译(没必要,已经比较简单了,重要的就是进行每条的诠释了,后续...) Entire Project on a CDN Because JAMstack projects don’t ...

  9. C语言词法分析:C#源码

    今天继续研究代码解析的算法 这个是算法流程图 有图解可能更直观一点: 以下是c#源码:   1using System;   2using System.IO;   3using System.Tex ...

  10. asp+jquery+ajax,asp后台程序执行不正常

    项目中前台页面通过jquery .ajax功能将关键数据传递到后台并写入数据库,调试中发现后台程序一直没有正常执行,后反复排查 发现asp程序中不能包含#include file语句