Android测试教程8--测试我们的Activity-第1篇
来源:互联网 发布:简历采集软件 编辑:程序博客网 时间:2024/06/05 14:48
做安卓开发,怎能不测试下我们的Activity呢?
但实际的项目经验告诉我的直觉,这个测试真是因人而异啊。
为啥?
- 有些人把网络请求直接写在Activity里面的
- 有采用MVVM,MVP架构的
- 有的把数据库操作部分直接写在Activity里面的
- 还有各种乱七八糟的
所以理解的Activity测试内容就给人不一样的感觉。
这里讲下一个特殊的测试类ActivityUnitTestCase
ActivityUnitTestCase
这个类通常用来测试单独Activity,和前面写的测试 ActivityInstrumentationTestCase2是一个相反面。什么意思呢?
前者更多的是关注与这个Activity本事的行为,而不是和的别的组件或UI之类相关的操作,即被测试的Activity 不运行在一般应用运行的环境中也不和其它Activity产生交互,什么跳转到别的Activity的不是他该干的。调用了不能用的方法的话是会抛出异常的
后者就偏向于和Anroid系统进行交互。
废话这么多,我们来看下实际的测试情况
上代码
public class MainActivityTest extends ActivityUnitTestCase<MainActivity> { private Intent mStartIntent; private Button mButton; public MainActivityTest(Class<MainActivity> activityClass) { super(activityClass); } public MainActivityTest() { super(MainActivity.class); } @Override protected void setUp() throws Exception { super.setUp(); mStartIntent = new Intent(Intent.ACTION_MAIN); } @MediumTest public void testPreconditions() { startActivity(mStartIntent, null, null); mButton = (Button) getActivity().findViewById(R.id.go); assertNotNull(getActivity()); assertNotNull(mButton); } @MediumTest public void testSubLaunch() { MainActivity activity = startActivity( mStartIntent, null, null); mButton = (Button) activity.findViewById(R.id.go); mButton.performClick(); assertNotNull(getStartedActivityIntent()); assertTrue(isFinishCalled()); } @MediumTest public void testLifeCycleCreate() { MainActivity activity = startActivity( mStartIntent, null, null); getInstrumentation().callActivityOnStart(activity); getInstrumentation().callActivityOnResume(activity); getInstrumentation().callActivityOnPause(activity); getInstrumentation().callActivityOnStop(activity); //onDestory()可以不调用的,系统自动会调用这个操作 }}
上面演示的是一些常见的方法调用,包括对整个的生命周期的调用。
和对一个按钮Button的点击操作的演示,点击后执行的操作是跳转到另外一个Activity然后结束当前的。
操作如下:
startActivity(new Intent(this,test2Activity.class)); finish();
所以,在我们执行mButton.performClick();
的后面跟着这么两句
assertNotNull(getStartedActivityIntent()); assertTrue(isFinishCalled());
获取新启动的Intent,同时判断自己是否结束。
这两个应该是很多界面都会遇到的操作。
进一步的测试
一般,我们的Activity还有很多操作在里面,例如去取一些数据库数据,从网络加点数据,展示到界面等。
那么我该怎么确定读取了什么数据,和我预期的是一致的呢?
那么现在需要进一步的测试,
来mock我们这个Activity需要的数据的时候啦。
怎么用,请看这一篇:
Android测试教程11–Mock之mockito,异步测试
后记
另外需要提醒的一点是,
我们的Activity最好是继承于extends Activity
不要写成MainActivity extends ActionBarActivity
之类的。
要不然会遇到下面的错误:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.test2/com.example.test2.MainActivity}: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
- Android测试教程8--测试我们的Activity-第1篇
- Android测试教程6--测试我们的Application
- Android测试教程(6):测试Activity
- Android测试教程(6):测试Activity
- 基于Android设备的Kali Linux渗透测试教程第1章渗透测试
- Android测试教程(8):测试Service
- Android测试教程(8):测试Service
- 我们的测试
- Android Activity 测试
- android activity 生命周期测试
- Android activity生命周期测试
- Android Activity 测试指南
- Android测试教程(1):概述
- Android测试教程(1):概述
- Android测试教程(1):概述
- Android的Activity的生命周期测试
- Android单元测试-对Activity的测试
- Activity的生命周期测试
- 设计模式之二 工厂方法模式 Factory Method
- 什么是移动应用营销新趋势:Web需要SEO,App也需要ASO
- 自学cocos2d js游戏开发应该按什么步骤进行
- Android 5.0上动态布局层级覆盖问题
- Spring+Quartz实现定时任务的配置方法
- Android测试教程8--测试我们的Activity-第1篇
- Discuz X3.2云平台开通地址及方法
- Android 图片优化
- What does information_schema.TABLES.DATA_FREE mean in MySQL?
- Akka性能测试
- android资源目录之drawable
- Unity3d Linux 下面画面撕裂问题
- IOS图层Layer学习笔记(四)—— CAShapeLayer
- 从2-3-4树谈到Red-Black Tree(红黑树) http://www.cnblogs.com/guoyiqi/archive/2011/06/08/2129310.html