本文介绍如何在 Eclipse ADT 中建立并运行 Android 应用测试程序。在阅读本文以前,你应该先看 Managing Projects from Eclipse 和 Building and Running from Eclipse 章节,这些章节是关于如何建立一个 Android 应用的,并提供了一些经过 ADT 建立和运行一个应用程序的基本流程。你也可能想先看看 Testing Funamentals 章节,它提供了对 Android 测试框架的一个总览。html
ADT 具备一下特性,这些特性有利于咱们有效的设置、管理咱们的测试环境:android
若是你不是在 Eclipse 中作开发,或者你想学一下若是经过命令行来建立、运行测试程序,那么轻参考 Testing from Other IDEs。app
Creating a Test Project框架
要为 Android 应用程序设置一个测试环境,首先必须建立一个独立的工程来控制测试代码。新的工程要遵循普通 Android 应用的目录结构。该工程含有(同普通 Android 工程)相同类型的内容和文件,好比源代码文件、资源文件,还有一个 manifest 文件,等等……。你所建立的测试工程经过它的 manifest 文件中的 <instrumentation> 标签关联到它的待测应用程序。eclipse
经过 “New Android Test Project” 对话框能够很容易地建立一个新的测试工程,而且这个工程会拥有一个合适的结构,manifest 文件中也会包含 <instrumentation> 标签。任什么时候候你均可以用该对话框建立测试工程。该对话框只有在你建立一个新的 Android 主应用程序工程后才会出现,可是你也能够用它来为以前已经建立的工程建立测试工程。ide
用 Eclipse ADT 建立一个测试工程:函数
在 Eclipse 中,选择 File > New > Other。这样就打开了对向导对话框。工具
在该对话框中的下拉列表向导中找到 Android,而后点击左边的 toggle 按钮。而后选择 Android Test Project,而后点击对话框底部的 Next。New Android Test Project 向导就打开了。测试
到了 Test Project Name,输入一个工程名字。尽管能够取任意的名字,可是你可能想把这个名字和待测应用程序的名字联系起来。一个简单的办法是把待测应用的工程名字加一个 “Test” 作为测试工程的名字。这样这个名字就会成为推荐项目路径的一部分,不要紧,在下一步你能够修改它。ui
检查 content 面板中工程的推荐路径。若是选中了 Use default location 那么向导就会把 workspath 和你输入的工程名字串起来做为工程的推荐路径。例如,若是你的 workspace 是 /usr/local/workspace,工程名字是 MyTestApp,那么向导就会推荐 /usr/local/workspace/MyTestApp。要本身选择一个路径,就要去掉 Use default location 的选择,而后输入或者选择一个想要的工程路径。要详细了解关于工程位置的问题,请查看 Testing Fundamentals。
在测试目标面板,能够设置一个已存在的 Android 工程做为待测工程,点击 Browse,而后从列表中选择一个 Android 应用。如今向导已经完成了 Test Target Package,Application Name,和 Package Name fields(后两项在属性面板中)。
在 Build Target 面板选择待测应用用的 Android SDK。
点击 Finish 结束向导。若是 Finish 按钮是 disabled,请查看向导对话框顶部的错误信息,fix 全部问题。
Creating a Test Package
建立一个测试工程后还须要建立一个测试包。这个测试包不须要 Activity,可是若是你愿意也能够定义一个。虽然你的测试包里能够有 Activity 类,test case 类或者普通类,可是你的主要 test case 应该继承自一个 Android test case 类或者 JUnit 类,由于这些类提供了最好的测试功能。
测试包不须要 Android GUI。当在 Eclipse ADT 中运行这个测试包时,它的结果显示在 JUnit 视图中。如何运行测试以及查看结果,在 Running Tests 部分有详细描述
要建立测试包,要先了解一个 Android 的 test case 类,它们定义在 一个定义在 android.test 包中。这些类继承自 JUnit TestCase 类。而且,为了对 Activity 进行测试,针对测试 Activity 对象的类还提供了 instrumentation。关于 test case 类的更详细信息请参考 Testing Fundamentals。
在建立测试包以前,要先为测试类选定一个 Java 包标识符,还有 Android 包名。更多详情请参考 Testing Fundamentals。
在工程中新增一个 test case 类:
如今必须确保构造函数设置是正确的。JUnit 要求为 test case 类建立一个没有参数的构造函数。构造函数的第一句话要调用基类的构造函数。每一个 test case 基类都有一个构造函数签名,更多详情请参考 android.test 文档中的类文档。
咱们须要经过覆写 setUp() 和 tearDown 函数来控制测试环境:
另外一个有用的作法是在测试类中添加 testPreconditions() 函数。用这个函数来测试待测应用是否正确初始化。过这个测试失败了,那么就是初始化环境出错。若是是这样,那么无论测试成功与否,进一步的测试都不可信。
Activity Testing 教程对如何建立 test case 类和测试函数有更详细的阐述。
Running Tests
当你在 Eclipse ADT 中运行测试包,输出就显示在 Eclipse JUnit 视图中。既能够运行整个测试包,也能够运行一个 test case 类。运行测试的时候,是 Eclipse 调用 adb 命令,而后 adb 命令运行测试包,并显示输出结果,因此在 Eclipse 中运行测试和经过命令行运行没什么区别。
和其它应用同样,在 Eclipse ADT 中运行测试电脑必须链接一台设备或者用一个 Android 模拟器。若是用模拟器,必须用和待测包用一样 API 的虚拟设备(AVD)。
在 Eclipse 中运行测试有两种方式:
下一部分讲解如何建立、运行测试配置。
经过运行测试配置来运行一组测试:
控制台会显示一系列消息来展现测试运行的工程。每一个消息都以一个时间戳和一个文件名开头,文件名表示该消息的来源。例如,当在一个没有彻底启动的模拟器中运行测试时就会显示下面的消息:
[yyyy-mm-dd hh:mm:ss - testfile] Waiting for HOME ('android.process.acore') to be launched...
接下来,在对这些消息的描述中,devicename 是指运行测试的设备或者模拟器的名字,prot 是指设备的端口号,devicename 和 port 都是 adb devices 命令格式中用到的。testfile 是指正在运行测试工程的 apk 文件名,appfile 是待测工程的文件名。
HOME is up on device 'devicename-port'
Uploading testfile onto device 'devicename-port'
Installing testfile
.Success!
下面几行是一个示例的信息:
[2010-07-01 12:44:40 - MyTest] HOME is up on device 'emulator-5554'
[2010-07-01 12:44:40 - MyTest] Uploading MyTest.apk onto device 'emulator-5554'
[2010-07-01 12:44:40 - MyTest] Installing MyTest.apk...
[2010-07-01 12:44:49 - MyTest] Success!
instrumentation_class 是指你指定的 instrumentation test runner 的完整类名,test runner 通常是 InstrumentationTestRunner。
Collecting test information
而后是
Sending test information to Eclipse
下面是一个示例测试的信息:
[2010-01-01 12:45:02 - MyTest] Launching instrumentation android.test.InstrumentationTestRunner on device emulator-5554
[2010-01-01 12:45:02 - MyTest] Collecting test information
[2010-01-01 12:45:02 - MyTest] Sending test information to Eclipse
[2010-01-01 12:45:02 - MyTest] Running tests...
[2010-01-01 12:45:22 - MyTest] Test run complete
测试结果显示在 Junit 视图中。分为上下两个窗口,顶部窗口显示摘要,底部窗口显示跟踪栈信息。
顶部窗口包含测试信息,在窗口的顶部会显示下面信息:
顶部窗体内部显示测试运行的详细信息。对每个 test case 类都有一行显示它的类名。点击这一行左边的箭头展开能够查看该类中单个测试函数。如今你一查看该类中的每个测试函数,右边它花费的时间。若是双击函数名,Eclipse 就会在编辑窗口打开测试类的源代码,并把焦点移到该函数的第一行。
图片1显示一个测试成功的结果
图片1
底部窗口显示了跟踪栈的信息。若是你在顶部窗口中选中一个失败的测试,底部窗口就会显示该测试的跟踪栈信息。若是双击一个和你的代码相对应的行,就会在编辑窗口高亮显示发生错误的代码。针对成功的测试底部窗口就是空的。
图片2显示了一个失败的测试。
图片2