Activity 的单元测试,每个Activity都是单独运行的,独立于系统环境。做单元测试的时候同个应用中的Activity互不相连,互相独立,每个Activity会单独启动,执行完测试用例后,Activity自动关闭。下面的图是android.test类图结构。
InstrumentationTestCase类
继承自JUnit TestCase类,并可以使用Instrumentation框架,用于测试Activity。使用Instrumentation,Android可以向程序发送事件来自动进行UI测试,并可以精确控制Activity的启动,监测Activity生命周期的状态。
基类是InstrumentationTestCase。它的所有子类都能发送按键或触摸事件给UI。子类还可以注入一个模拟的Intent。
子类有:
n ActivityTestCase——Activity测试类的基类。
n SingleLaunchActivityTestCase——测试单个Activity的类。它能触发一次setup()和tearDown(),而不是每个方法调用时都触发。如果你的测试方法都是针对同一个Activity的话,那就使用它吧。
n ActivityUnitTestCase——对单个Activity进行单一测试的类。使用它,你可以注入模拟的Context或Application,或者两者。它用于对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事件
}
});
}
}
相关推荐
上一篇文章已经介绍了单元测试的作用和简单示例,如果不了解的读者可以先阅读上一篇[ Android单元测试-作用以及简单示例](http://blog.csdn.net/double2hao/article/details/77159380)。 这篇文章主要介绍常见的...
在Android开发中,单元测试是确保代码质量的重要环节。它允许开发者验证代码的各个部分是否按预期工作,有助于提前发现并修复潜在问题。本话题主要关注Android单元测试,特别是结合了Volley网络库的测试实践,以及...
在Android应用开发中,单元测试是确保代码质量、可维护性和稳定性的关键步骤。通过单元测试,开发者可以针对应用程序中的各个模块进行独立测试,确保它们按照预期工作,从而避免潜在的错误和缺陷。本文将深入探讨...
本Demo旨在提供一个基础的Android单元测试实践,通过实例化和运行测试用例,确保应用程序的各个组件(如Activity、Service、BroadcastReceiver等)在独立环境中正确执行。 单元测试通常使用JUnit框架进行,这是Java...
【标题】"最简单的含单元测试的spring boot+activiti集成demo" 描述了一种将流行的Spring Boot框架与流程管理工具Activiti结合使用的实践案例。这个集成演示项目旨在帮助开发者快速理解和实现基于Spring Boot的...
学习Android有一段时间了,虽然前段时间对软件测试有了一些了解,不过接触android的单元测试却是头一次。这几天在物流大赛上也用了不少时间,所以对于android的单元测试没有太深入的研究,所以先写个基本入门吧!...
[Android]_[中级]_[如何对服务和Activity进行单元测试]的配套项目源码 https://blog.csdn.net/infoworld/article/details/124580162
### Android单元测试详解 在移动应用开发过程中,为了确保应用的质量和稳定性,单元测试成为了一个不可或缺的环节。本文将基于给定的文件信息——“Android 单元测试 方法”,详细介绍几种常用的Android单元测试...
总结起来,`ActivityUnitTestCase`适合进行完全隔离的Activity单元测试,而`ActivityInstrumentationTestCase2`则适用于需要与系统环境交互的测试场景,尤其是涉及到UI操作的时候。选择哪种测试框架取决于测试的具体...
在Android开发中,单元测试是确保代码质量、可维护性和减少缺陷的重要环节。它允许开发者对应用程序中的每个小部分(即“单元”)进行独立测试,以验证它们按预期工作。下面将详细介绍Android单元测试的相关知识点,...
在Android开发中,单元测试是确保代码质量的重要环节。它允许开发者针对应用程序的各个模块进行独立测试,确保每个部分的功能正确性。以下是如何在Android项目中添加单元测试的方法与步骤: 1. **修改配置文件**: ...
### Android单元测试框架搭建手册 #### 一、前言 随着移动互联网的快速发展,Android应用的质量成为了用户体验的关键因素之一。为了提高应用的质量,确保代码的可靠性和稳定性,单元测试成为了必不可少的一部分。...
在Android应用开发中,单元测试是一项至关重要的任务,它能够帮助开发者确保代码的质量,提高软件的稳定性和可维护性。本项目聚焦于Android中的按键单元测试,特别是针对按钮(button)点击事件的测试。以下是对这个...
- **继承结构**:Android的单元测试类通常继承自特定的基类(如`ActivityTestCase`、`ServiceTestCase`等),这些基类为测试提供了便捷的支持,如自动初始化数据库或启动Activity等功能。 - **选择合适的基类**:...
在Android开发过程中,单元测试是确保代码质量与可维护性的重要环节。单元测试允许开发者针对应用程序的各个组件,如函数、方法或类,进行独立测试,以验证它们在各种预期和非预期输入下都能正常工作。这篇资料主要...
### Android Studio JUnit单元测试详解 #### 一、单元测试的重要性及作用 单元测试是软件开发过程中不可或缺的一部分,尤其在Android应用开发中更是如此。它主要用于验证程序中的最小可测试单元——通常是函数或...
在Android应用开发中,`Activity`是用户界面的基本单元,`launchMode`是每个`Activity`在`AndroidManifest.xml`中可配置的一个重要属性。它决定了`Activity`启动时的行为方式,对应用的流程和用户体验有直接影响。本...