Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 445|回复: 0

开发交流:Android单元测试源码解读

[复制链接]

该用户从未签到

发表于 2011-10-24 10:35:02 | 显示全部楼层 |阅读模式
Android手机操作系统是一个开源的操作系统。程序员们可以在模拟器的帮助下对其进行修改,来实现各种功能需求,满足用户的应用。在这里我们先来了解一下Android单元测试的相关内容。

在网络上找了半天,也没有找正确的Android的测试办法,最后还是自己琢磨出来的。以前就听我朋友说过,Android毛病一堆,现在才体会到。Android SDK 和 iphone SDK 比,就不是一个档次的东西。网上总是有人说,Android还年轻,要体谅。我可不同意,要知道,Android都已经出了好几个版本了,而现在最新的1.5版和iphone sdk的beta版都比不上。
先说说它的单元测试吧,基于1.5和eclipse。这里我说的是我的思路,有更加好的思路,欢迎指导。
我的方法:如果你要测试的不是Activity或者Service,就用AndroidTestCase;否则选择:ActivityUnitTestCase,ServiceTestCase。
在做Android单元测试以前,你需要创建一个新的项目,把要测试的项目包含到java build path中来。项目中的AndroidManifest.xml如下(这里假设你的your.test.package里面包含你的tests,your.work.package包含被测试的类):
Xml代码
< ?xml version="1.0" encoding="utf-8"?>   

< manifest xmlns:android=

"http://schemas.Android.com/apk/res/Android"   

package="your.tests.package">   

< application>   

< uses-library Android:name="Android.test.runner" />   

< /application>   

< instrumentation Android:name=

"Android.test.InstrumentationTestRunner"   

Android:targetPackage="your.work.package"   

Android:label="Tests for Api Demos."/>   

< /manifest>   

< ?xml version="1.0" encoding="utf-8"?>

< manifest xmlns:android=

"http://schemas.Android.com/apk/res/Android"

package="your.tests.package">

< application>

< uses-library Android:name="Android.test.runner" />

< /application>

< instrumentation Android:name=

"Android.test.InstrumentationTestRunner"

Android:targetPackage="your.work.package"

Android:label="Tests for Api Demos."/>

< /manifest>
复制代码
那么就可以做Android单元测试了,给出下面的实例;
1.用AndroidTestCase;
Java代码
public class SdcardTest extends AndroidTestCase {   

public void test1(){   

// Log.v()   

File f=new File("/sdcard");   

String[] l=f.list();   

this.assertTrue(f.exists());   

this.assertTrue(f.isDirectory());   

this.assertTrue(f.list().length>0);   

}   

}   

public class SdcardTest extends AndroidTestCase {  

public void test1(){  

// Log.v()  

File f=new File("/sdcard");  

String[] l=f.list();  

this.assertTrue(f.exists());  

this.assertTrue(f.isDirectory());  

this.assertTrue(f.list().length>0);  

}  

}
复制代码
2.用ActivityUnitTestCase
Java代码

public class ForwardingTest extends ActivityUnitTestCase

< Forwarding> {   

private Intent mStartIntent;   

private Button mButton;   

public ForwardingTest() {   

super(Forwarding.class);   

}   

@Override   

protected void setUp() throws Exception {   

super.setUp();   

// In setUp, you can create any shared test data,

or set up mock components to inject   

// into your Activity. But do not call startActivity()

until the actual test methods.   

mStartIntent = new Intent(Intent.ACTION_MAIN);   

}   

/**   

* The name 'test preconditions' is a convention

to signal that if this   

* test doesn't pass, the test case was not set up

properly and it might   

* explain any and all failures in other tests.

This is not guaranteed   

* to run before other tests, as junit uses

reflection to find the tests.   

*/   

@MediumTest   

public void testPreconditions() {   

startActivity(mStartIntent, null, null);   

mButton = (Button) getActivity().findViewById(R.id.go);   

assertNotNull(getActivity());   

assertNotNull(mButton);   

}   

/**   

* This test demonstrates examining the way that

activity calls startActivity() to launch   

* other Activities.   

*/   

@MediumTest   

public void testSubLaunch() {   

Forwarding activity = startActivity(mStartIntent, null, null);   

mButton = (Button) activity.findViewById(R.id.go);   

// This test confirms that when you click the

button, the activity attempts to open   

// another activity (by calling startActivity)

and close itself (by calling finish()).   

mButton.performClick();   

assertNotNull(getStartedActivityIntent());   

assertTrue(isFinishCalled());   

}   

/**   

* This test demonstrates ways to exercise the Activity's life cycle.   

*/   

@MediumTest   

public void testLifeCycleCreate() {   

Forwarding activity = startActivity(mStartIntent, null, null);   

// At this point, onCreate() has been called, but nothing else   

// Complete the startup of the activity   

getInstrumentation().callActivityOnStart(activity);   

getInstrumentation().callActivityOnResume(activity);   

// At this point you could test for various configuration

aspects, or you could   

// use a Mock Context to confirm that your activity

has made certain calls to the system   

// and set itself up properly.   

getInstrumentation().callActivityOnPause(activity);   

// At this point you could confirm that the activity

has paused properly, as if it is   

// no longer the topmost activity on screen.   

getInstrumentation().callActivityOnStop(activity);   

// At this point, you could confirm that the activity

has shut itself down appropriately,   

// or you could use a Mock Context to confirm that your

activity has released any system   

// resources it should no longer be holding.   

// ActivityUnitTestCase.tearDown(), which is always

automatically called, will take care   

// of calling onDestroy().   

}   

}
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-11 05:42 , Processed in 0.364924 second(s), 46 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表