`
wenzongliang
  • 浏览: 466701 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Activity的单元测试

 
阅读更多

Activity 的单元测试,每个Activity都是单独运行的,独立于系统环境。做单元测试的时候同个应用中的Activity互不相连,互相独立,每个Activity会单独启动,执行完测试用例后,Activity自动关闭。下面的图是android.test类图结构。 

 

 

 

 InstrumentationTestCase

继承自JUnit TestCase类,并可以使用Instrumentation框架,用于测试Activity。使用InstrumentationAndroid可以向程序发送事件来自动进行UI测试,并可以精确控制Activity的启动,监测Activity生命周期的状态。

基类是InstrumentationTestCase。它的所有子类都能发送按键或触摸事件给UI。子类还可以注入一个模拟的Intent

 

子类有:

n  ActivityTestCase——Activity测试类的基类。

n  SingleLaunchActivityTestCase——测试单个Activity的类。它能触发一次setup()tearDown(),而不是每个方法调用时都触发。如果你的测试方法都是针对同一个Activity的话,那就使用它吧。

n  ActivityUnitTestCase——对单个Activity进行单一测试的类。使用它,你可以注入模拟的ContextApplication,或者两者。它用于对Activity进行单元测试。不同于其它的Instrumentation类,这个测试类不能注入模拟的Intent

n  ActivityInstrumentationTestCase2——在正常的系统环境中测试单个Activity的类。你不能注入一个模拟的Context,但你可以注入一个模拟的Intent。另外,你还可以在UI线程(应用程序的主线程)运行测试方法,并且可以给应用程序UI发送按键及触摸事件。

n  SyncBaseInstrumentation——测试Content Provider同步性的类。它使用Instrumentation在启动测试同步性之前取消已经存在的同步对象。

 

Avtivity单元测试简单举例如下:

被测类:

publicclass MainActivity extends ActionBarActivity {

   @Override

   protectedvoid onCreate(Bundle savedInstanceState) {

      super.onCreate(savedInstanceState);

      setContentView(R.layout.activity_main);

      View toLoginView = findViewById(R.id.to_login);

      mUsernameView = (EditText) //输入框

mMainActivity.findViewById(R.id.username); //提交按钮

   toLoginView.setOnClickListener(new View.OnClickListener(){

         publicvoid onClick(View view) {

            Intent intent = new Intent(getApplicationContext(),

                   LoginActivity.class);

            startActivity(intent);

         }

      });

   }

}

 

 

测试类:

publicclass MainActivityTests extends

      ActivityInstrumentationTestCase2<MainActivity> {

 

   private MainActivity mMainActivity;

   private Instrumentation mInstrumentation;

   private View mToLoginView;

   privatestaticinti = 0;

 

   // 此构造函数一定要提供

   public MainActivityTests() {

      super(MainActivity.class);

   }

 

   @Override

   protectedvoid setUp() throws Exception {

      super.setUp();

      // 如果要发送键盘事件一定要关闭触摸模式。不然键盘事件将被忽略。

      setActivityInitialTouchMode(false);

      // 可以发送键盘事件的对象

      mInstrumentation = getInstrumentation();

      // 启动avtivity,此函数每执行一次,activity就会启动一次。

      mMainActivity = getActivity();

      // 输入框

      mUsernameView = (EditText) mMainActivity.findViewById(R.id.username);

      // 提交按钮

      mToLoginView = mMainActivity.findViewById(R.id.to_login);

   }

 

   publicvoid testPreConditions() {

      assertTrue(mToLoginView != null);

   }

 

   publicvoid testToLogin() {

      //UI相关的操作要放在UI线程中执行。

      /*

       * instrumentation.runOnMainSync();等同于一下两个函数

       * mActivity.runOnUiThread();//主线程中运行UI操作

       * mInstrument.waitForIdleSync();//等待UI同步

       */

      // mMainActivity.runOnUiThread(new Runnable() {

      // public void run() {

      // mUsernameView.requestFocus();

      // }

      // });

      // // 因为测试用例运行在单独的线程上,这里最好要

      // // 同步application,等待其执行完后再运行

      // mInstrumentation.waitForIdleSync();

 

      mInstrumentation.runOnMainSync(new Runnable() {

 

         @Override

         publicvoid run() {

            mUsernameView.requestFocus();//获得焦点

         }

      });

      sendKeys(KeyEvent.KEYCODE_Y, KeyEvent.KEYCODE_U, KeyEvent.KEYCODE_A, KeyEvent.KEYCODE_U);//输入字符

 

      mInstrumentation.runOnMainSync(new Runnable() {

         @Override

         publicvoid run() {

            mToLoginView.requestFocus();

            mToLoginView.performClick();//执行提交按钮的click事件

         }

      });

   }

 

}

  • 大小: 69.4 KB
分享到:
评论

相关推荐

    Android单元测试-对Activity的测试

    上一篇文章已经介绍了单元测试的作用和简单示例,如果不了解的读者可以先阅读上一篇[ Android单元测试-作用以及简单示例](http://blog.csdn.net/double2hao/article/details/77159380)。 这篇文章主要介绍常见的...

    Android单元测试与Volley单元测试

    在Android开发中,单元测试是确保代码质量的重要环节。它允许开发者验证代码的各个部分是否按预期工作,有助于提前发现并修复潜在问题。本话题主要关注Android单元测试,特别是结合了Volley网络库的测试实践,以及...

    Android-节省时间并在Android上清除您的单元测试

    在Android应用开发中,单元测试是确保代码质量、可维护性和稳定性的关键步骤。通过单元测试,开发者可以针对应用程序中的各个模块进行独立测试,确保它们按照预期工作,从而避免潜在的错误和缺陷。本文将深入探讨...

    Android单元测试Demo

    本Demo旨在提供一个基础的Android单元测试实践,通过实例化和运行测试用例,确保应用程序的各个组件(如Activity、Service、BroadcastReceiver等)在独立环境中正确执行。 单元测试通常使用JUnit框架进行,这是Java...

    最简单的含单元测试的spring boot+activiti集成demo

    【标题】"最简单的含单元测试的spring boot+activiti集成demo" 描述了一种将流行的Spring Boot框架与流程管理工具Activiti结合使用的实践案例。这个集成演示项目旨在帮助开发者快速理解和实现基于Spring Boot的...

    Android单元测试初探——Instrumentation

    学习Android有一段时间了,虽然前段时间对软件测试有了一些了解,不过接触android的单元测试却是头一次。这几天在物流大赛上也用了不少时间,所以对于android的单元测试没有太深入的研究,所以先写个基本入门吧!...

    Android如何对服务和Activity进行单元测试

    [Android]_[中级]_[如何对服务和Activity进行单元测试]的配套项目源码 https://blog.csdn.net/infoworld/article/details/124580162

    Android 单元测试 方法

    ### Android单元测试详解 在移动应用开发过程中,为了确保应用的质量和稳定性,单元测试成为了一个不可或缺的环节。本文将基于给定的文件信息——“Android 单元测试 方法”,详细介绍几种常用的Android单元测试...

    android之Junit ActivityUnitTestCase 剖析

    总结起来,`ActivityUnitTestCase`适合进行完全隔离的Activity单元测试,而`ActivityInstrumentationTestCase2`则适用于需要与系统环境交互的测试场景,尤其是涉及到UI操作的时候。选择哪种测试框架取决于测试的具体...

    android 单元测试

    在Android开发中,单元测试是确保代码质量、可维护性和减少缺陷的重要环节。它允许开发者对应用程序中的每个小部分(即“单元”)进行独立测试,以验证它们按预期工作。下面将详细介绍Android单元测试的相关知识点,...

    Android添加单元测试的方法与步骤

    在Android开发中,单元测试是确保代码质量的重要环节。它允许开发者针对应用程序的各个模块进行独立测试,确保每个部分的功能正确性。以下是如何在Android项目中添加单元测试的方法与步骤: 1. **修改配置文件**: ...

    Android单元测试框架搭建手册

    ### Android单元测试框架搭建手册 #### 一、前言 随着移动互联网的快速发展,Android应用的质量成为了用户体验的关键因素之一。为了提高应用的质量,确保代码的可靠性和稳定性,单元测试成为了必不可少的一部分。...

    Android unitTest 按键单元测试项目

    在Android应用开发中,单元测试是一项至关重要的任务,它能够帮助开发者确保代码的质量,提高软件的稳定性和可维护性。本项目聚焦于Android中的按键单元测试,特别是针对按钮(button)点击事件的测试。以下是对这个...

    Android上的单元测试

    - **继承结构**:Android的单元测试类通常继承自特定的基类(如`ActivityTestCase`、`ServiceTestCase`等),这些基类为测试提供了便捷的支持,如自动初始化数据库或启动Activity等功能。 - **选择合适的基类**:...

    Android 单元测试资料

    在Android开发过程中,单元测试是确保代码质量与可维护性的重要环节。单元测试允许开发者针对应用程序的各个组件,如函数、方法或类,进行独立测试,以验证它们在各种预期和非预期输入下都能正常工作。这篇资料主要...

    Android Studio JUnit单元测试

    ### Android Studio JUnit单元测试详解 #### 一、单元测试的重要性及作用 单元测试是软件开发过程中不可或缺的一部分,尤其在Android应用开发中更是如此。它主要用于验证程序中的最小可测试单元——通常是函数或...

    Activity的launchMode测试

    在Android应用开发中,`Activity`是用户界面的基本单元,`launchMode`是每个`Activity`在`AndroidManifest.xml`中可配置的一个重要属性。它决定了`Activity`启动时的行为方式,对应用的流程和用户体验有直接影响。本...

Global site tag (gtag.js) - Google Analytics