分类: LINUX
2009-04-27 17:39:34
如果想在android里面做单元测试,有以下三种方法可行。
第一, 就是java程序员最为熟悉和常用的JUnit,
但是由于目前android
sdk (version 1.1)中只是提供了stubbed
methods/classes,没有具体的实现代码,所以如果用JUnit的话,我们需要在运行单元测试时,一定要 用JDK来运行,利用java命令来启动JUnit的某个Runner。如果是用Eclipse的话,可以在Run
Configuration里新建一个JUnit。但是一定要记得在Classpath选项卡里将Bootstrap
Entries中的Android
Library改成JRE,并且添加junit.jar。具体的设置可以参考:http://developer.android.com/guide/appendix/faq/troubleshooting.html#addjunit。 而且,更为遗憾的是,这种方法运行的JUnit运行在JDK之上的,而不是android,所以,只能测试一些和android无关的东西,比如业务逻辑,数据封装,数值计算等等。并不能测试android
api
第二, 采用Instrumentation. Android单元测试的主入口是InstrumentationTestRunner。它相当于JUnit当中TestRunner的作用。你可以将Instrumentation理解为一种没有图形界面的,具有启动能力的,用于监控其他类(用Target Package声明)的工具类。任何想成为Instrumentation的类必须继承android.app.Instrumentation。
第三,利用android提供的androidTestCase,通过继承这个类来实现自己的test case,然后自己为test设计UI,该方法具体用法放在了另外一篇博客中,可以点击下面的链接阅读:
下面通过一个实例来看一下如何通过Instrumentation来做单元测试。
Step 1. 首先编写需要测试的activity:
|
|
|
需要注意的是,在这里面我加上了:
<uses-library android:name="android.test.runner"
/>
以及:
<instrumentation android:targetPackage="com.android.ut"
android:name="android.test.InstrumentationTestRunner"
android:label="Test Unit Tests">instrumentation>
Step 4. 运行
首先通过模拟器运行一下AndroidUT,然后在命令行终端中运行
adb shell am instrument -e class
com.android.ut.test.TestApp -w com.android.ut/android.test.InstrumentationTestRunner
这样你就可以看到测试结果了。
更新于2009年5月11日:
Android 1.5 SDK对JUnit有了新的改进,现在可以在Run和Debug菜单中,可以找到Run as “Android JUnit Test”。具体可以参考Android SDK 1.5 release notes.
1.5 SDK文档的 FAQ中少了,在1.5中试验了一下,发现Run as Junit test不能用了,即使按照以前的方法配置Junit.
Select Bootstrap Entries again and click Advanced.
而可喜的是,Run As.. -> Android Junit Test似乎可以用了,不过前提是需要配置一下:首先在manifest.xml中加上:
<uses-library android:name="android.test.runner" />
<instrumentation android:targetPackage="com.ut.prac"
android:name="android.test.InstrumentationTestRunner"
android:label="Test Unit Tests">instrumentation>
其次在Run configuration…中,选择Android Junit Test,再选择你要测试的test case(如果没有,需要在右键点击Android Junit Test,选择新建), 然后在右边的Test 那个tab中,指定Instrumentation Runner为android.test.InstrumentationTestRunner.
运行方法很简单,右键单击你的test case code文件,选择run as… -> android junit test.
chinaunix网友2009-08-19 20:36:59
请问博主,为什么我按照你的设置运行1.5的Unit testing,会出现这个错误: Test run failed: Unable to instantiate instrumentation ComponentInfo{com.android.ut/android.test.InstrumentationTestRunner}: java.lang.ClassNotFoundException: android.test.InstrumentationTestRunner in loader dalvik.system.PathClassLoader@43735370