Testing from Eclipse with ADT 翻译

本文介绍如何在 Eclipse ADT 中建立并运行 Android 应用测试程序。在阅读本文以前,你应该先看 Managing Projects from Eclipse Building and Running from Eclipse 章节,这些章节是关于如何建立一个 Android 应用的,并提供了一些经过 ADT 建立和运行一个应用程序的基本流程。你也可能想先看看 Testing Funamentals 章节,它提供了对 Android 测试框架的一个总览。html

ADT 具备一下特性,这些特性有利于咱们有效的设置、管理咱们的测试环境:android

  • 能够快速建立一个测试工程并关联到待测程序。在建立测试工程时会自动在待测工程的 manifest 文件插入所需的 <instrumentation> 元素。
  • 快速导入待测应用的类,这样测试程序就能够测试它们了。
  • 测试程序的运行时可配置的,包括要传给 Android 测试框架的标志(flags)。
  • 没必要脱离 Eclipse 就能够运行测试程序。ADT 自动 build 测试程序和待测程序,根据须要把它们安装到你的设备或者模拟器上,而且在 Eclipse 一个独立的窗口中显示结果。

若是你不是在 Eclipse 中作开发,或者你想学一下若是经过命令行来建立、运行测试程序,那么轻参考 Testing from Other IDEsapp

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,而后点击对话框底部的 NextNew 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 类:

  • Project Explorer 面板中打开测试工程,而后打开 src 目录。
  • 找到向导建立的 Java 包标识符。若是里面尚未加入类文件,该节点就没有子节点,那么它就显示一个没有被填充的图标。若是你想修改该标识符,就右键点击它,选择 Refactor > Rename,而后输入新的名字。
  • 好了,再次用右键点击这个 Java 包标识符,选择 New > Class。这样就会显示 New Java Class 对话框,而且相应 Source FolderPackage 已经设置好了。
  • 在名字输入框中输入 test case 类的名字,方法之一就是把待测组件的类名再加上一个 “Test”,例如,若是你要对 MyActivity 进行测试,那么 test case 的类名应该是 MyActivityTest。保留 pulibc 修饰符。
  • Superclass 输入框中输入你要继承的 Android test case 类的名字。也能够在可用的类中找一个。
  • 取消 Which method stubs would you like to create? 中的全部选项,而后点击 Finish。你要手动设置构造函数。
  • 在编辑面板就能够看到新建的类了。
  • 如今必须确保构造函数设置是正确的。JUnit 要求为 test case 类建立一个没有参数的构造函数。构造函数的第一句话要调用基类的构造函数。每一个 test case 基类都有一个构造函数签名,更多详情请参考 android.test 文档中的类文档。

    咱们须要经过覆写 setUp() 和 tearDown 函数来控制测试环境:

  • setUp():在类文件中,该函数会在调用任何测试函数以前被调用。咱们用这个函数来设置测试环境(the test fixture)。你能够在 setUp() 中实例化一个 Intent 对象,把 action 设置为 ACTION_MAIN,而后用这个 Intent 启动待测 Activity。
  • tearDown():在类中的全部的测试函数被调用后就会调用该函数。在这个函数里面咱们能够进行垃圾回收和重置测试环境。

另外一个有用的作法是在测试类中添加 testPreconditions() 函数。用这个函数来测试待测应用是否正确初始化。过这个测试失败了,那么就是初始化环境出错。若是是这样,那么无论测试成功与否,进一步的测试都不可信。

Activity Testing 教程对如何建立 test case 类和测试函数有更详细的阐述。

Running Tests


当你在 Eclipse ADT 中运行测试包,输出就显示在 Eclipse JUnit 视图中。既能够运行整个测试包,也能够运行一个 test case 类。运行测试的时候,是 Eclipse 调用 adb 命令,而后 adb 命令运行测试包,并显示输出结果,因此在 Eclipse 中运行测试和经过命令行运行没什么区别。

和其它应用同样,在 Eclipse ADT 中运行测试电脑必须链接一台设备或者用一个 Android 模拟器。若是用模拟器,必须用和待测包用一样 API 的虚拟设备(AVD)。

在 Eclipse 中运行测试有两种方式:

  • 像运行普通应用同样,从工程的上下文菜单中选择 Run As… > Android JUnit Test,或者点击主菜单上的 Run 菜单项。
  • 针对测试包建立一个 Eclipse 运行配置。这对于你想把测试分为多组的状况颇有用,每组都由从测试工程中选出的测试组成。运行测试配置,就能够运行一组测试。

下一部分讲解如何建立、运行测试配置。

经过运行测试配置来运行一组测试:

  1. 在 Package Explorer 视图中选中测试工程,而后选择主菜单中的 Run > Run Configurations…弹出 Run Configurations 对话框。
  2. 在左边的面板中找到 Android JUnit Test。在右边的面板中点击 Test 标签。”Project:”文本框显示工程名字。“Test class”下拉框显示测试工程中的一个测试类。
  3. 若是只运行一个测试类,就选中 Run a single test,而后在 “Project:”文本框中输入工程的名字,在“Test class”下拉框中选择类名。
  4. 若是要运行全部的测试类,就选中 Run all tests in the selected project, or package,而后在文本框内输入工程名或者包名。
  5. 设置 Target 标签。
    1. 可选:若是用模拟器,就选择 Automatic,而后在 Android Virtual Device(AVD)选择表中选择一个存在的 AVD。
    1. 在 Emulator Lanuch Parameters 面板中设置要使用的 Android 模拟器标记。详细信息请参考 Android Emulator
  6. 点击 Common 标签。在 Save As 面板中,若是要把该配置保存到本地请选择 Locally (应用于当前工程),若是应用于其它工程请选择 Shared。
  7. 可选:把配置加到运行工具栏和 Favorites 菜单中:在 Display in Favorites 面板中选中 Run 前面的 checkbox。
  8. 可选:把配置加到测试菜单和工具栏中:选择 Debug 旁边的 checkbox。
  9. 点击 Close 保存配置。注意:虽然你如今就能够直接点 Run 运行测试,可是最好先保存配置,而后经过点击 Eclipse 工具栏来运行。
  10. 点击 Eclipse 工具栏中绿色 Run 按钮旁边的向下箭头,就会显示一个运行&测试配置菜单。
  11. 选择刚刚建立的配置启动测试。

控制台会显示一系列消息来展现测试运行的工程。每一个消息都以一个时间戳和一个文件名开头,文件名表示该消息的来源。例如,当在一个没有彻底启动的模拟器中运行测试时就会显示下面的消息:

[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 是待测工程的文件名。

  • 若是在模拟器中运行测试,而且模拟器尚未启动,那么 Eclipse 首先会启动模拟器。启动完成后就会显示下面的信息:

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!

  • 接下来的信息就是 Launching instrumentation instrumentation_class on device devicename-port

instrumentation_class 是指你指定的 instrumentation test runner 的完整类名,test runner 通常是 InstrumentationTestRunner。

  • 接下来是 InstrumentationTestRunner 编译须要执行的一系列测试,你会看到:

Collecting test information

而后是

Sending test information to Eclipse

  • 最后,你会看到 Running tests 信息,这包括你运行的全部测试。至此,你应该开始在 JUnit view 里面查看测试结果了。当测试结束时,你会在控制台看到 Test run complete 信息,这表示测试已经结束。

下面是一个示例测试的信息:

[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 视图中。分为上下两个窗口,顶部窗口显示摘要,底部窗口显示跟踪栈信息。

顶部窗口包含测试信息,在窗口的顶部会显示下面信息:

  • 测试包使用的总时间(显示为:Finished after x seconds)
  • 运行测试总数(Runs:)测试类中测试函数的个数
  • 错误数(Errors:) 测试运行发生的程序错误&程序异常个数
  • 失败个数(Failures:)测试失败的个数。这是断言失败的个数。就是没有错误发生,测试也能够是失败的。
  • 一个进度条,当测试运行时这个进度条从左到右步进。若是全部测试都成功进度条就是绿色的,若是有一个测试失败进度条就会从绿色变为红色。

顶部窗体内部显示测试运行的详细信息。对每个 test case 类都有一行显示它的类名。点击这一行左边的箭头展开能够查看该类中单个测试函数。如今你一查看该类中的每个测试函数,右边它花费的时间。若是双击函数名,Eclipse 就会在编辑窗口打开测试类的源代码,并把焦点移到该函数的第一行。

图片1显示一个测试成功的结果

figure1

图片1

底部窗口显示了跟踪栈的信息。若是你在顶部窗口中选中一个失败的测试,底部窗口就会显示该测试的跟踪栈信息。若是双击一个和你的代码相对应的行,就会在编辑窗口高亮显示发生错误的代码。针对成功的测试底部窗口就是空的。

图片2显示了一个失败的测试。

failure2

图片2

相关文章
相关标签/搜索