繁体   English   中英

如何测试 Android 库项目

[英]How to test an Android Library Project

我正在编写一个基于 Android Bitmap 类(称为 AndroindLib)的 Android 库项目,它只包含实用程序类(无活动)。 我尝试使用 Android JUnit 对其进行测试,但它一直抱怨找不到 AnroidLib.apk

单元测试 Android 库项目的正确方法是什么?

引用文档

“在库项目中设置代码和资源测试有两种推荐的方法:

  • 您可以设置一个测试项目来检测依赖于库项目的应用程序项目。 然后,您可以将测试添加到项目中以获取特定于库的功能。

  • 您可以设置依赖于库的标准应用程序项目并将检测放在该项目中。 这使您可以创建一个包含测试/仪器和要测试的代码的自包含项目。”

在您的测试项目中,只需更改包名称,使其与您的库的包相同。 例如,您有一个库,其包为"com.example.lib" 创建一个针对您的库的测试项目。 在清单文件中,您将看到package="com.example.lib.test"targetPackage="com.example.lib" 只需将包从“com.example.lib.test”更改为“com.example.lib”( targetPackage原样)。

此外,请确保该库不是在 Java 构建路径中引用到您的测试项目,而是作为通常的 Android 库:在 Eclipse 中,它必须在Project->Properties->Android选项卡中显示为库,但不在Project->Properties->Java Build Path选项卡。

然后运行你的测试。

http://www.paulbutcher.com/2010/09/android-library-project-with-tests-step-by-step/帮助描述在CommonsWare的回答中实现第二个建议所需的过程

根据文档

测试库模块与测试应用程序相同。 主要区别在于库及其依赖项会自动包含为测试 APK 的依赖项。 这意味着测试 APK 不仅包括它自己的代码,还包括库的 AAR 及其所有依赖项。 由于没有单独的“被测应用”,androidTest 任务仅安装(和卸载)测试 APK。 合并多个清单文件时,Gradle 遵循默认优先级顺序,并将库的清单合并到测试 APK 的主清单中。

注意:此解决方案基于使用 Eclipse Indigo (3.8.2),虽然基本原理是相同的,但对于另一个 IDE,可能需要稍微不同地实现。

我有类似的问题,我发现执行以下操作总是有效:

注意:这些说明用于从头开始构建新的项目组。如果您已经构建了项目组的一部分,那么您可能需要修改您的项目,以便它们以相同的方式连接。

  1. 通过在创建过程中选中“Is Library”复选框来创建一个新的 Android Library 项目。 (例如名为“RemingtonAndroidTools”的 Android 项目)。
  2. 构建 Android 库项目并验证它是否在 bin 文件夹中创建了一个 jar 文件。 (例如名为“RemingtonAndroidTools.jar”的 jar 文件。)
  3. 创建一个空的 Android 项目,用于测试将用作 Android 测试应用程序的 Android 应用程序。 (例如名为“RemingtonAndroidToolsTestApp”的 Android 项目)。 您不需要修改 Android Test App 项目的源代码或资源,除非您有一些必须添加以进行测试的内容。 无需对 Android 测试应用程序项目进行任何修改即可测试许多内容。 Android 测试应用程序项目是您的 Android 库项目和 Android Junit 项目之间的桥梁,它使通过 Android Junit 测试 Android 库项目成为可能。
  4. 转到 Android Test App 项目的 Java Build Path 的 Library 选项卡(在本例中为“RemingtonAndroidToolsTestApp”)。
  5. 通过“添加罐子...”按钮添加 Android 库项目(本例中为“RemingtonAndroidTools”)的 jar 文件(本例中为“RemingtonAndroidTools.jar”)。
  6. 创建一个用作 Android 库测试器的新 Android 测试项目(例如“RemingtonAndroidToolsTester”),并选择 Android 测试应用项目(在本例中为“RemingtonAndroidToolsTestApp”)作为目标。
  7. 转到 Android Library Tester 项目的 Java Build Path 的 Library 选项卡(本例中为“RemingtonAndroidToolsTester”)。
  8. 通过“添加罐子...”按钮添加 Android 库项目(本例中为“RemingtonAndroidTools”)的 jar 文件(本例中为“RemingtonAndroidTools.jar”)。
  9. 在 Android Library Tester 项目中找到 Android 包的最后一个文件夹(例如“danny.remington.remington_android_tools_test_app.test”)并添加一个从 ActivityInstrumentationTestCase2 继承的测试类(例如“MainActivityTest”)。
  10. 编辑测试类(本例中为“TestActivityTest”)以使用 Android 测试应用(本例中为“RemingtonAndroidToolsTestApp”)的活动(例如“TestActivity”)作为 ActivityInstrumentationTestCase2 的参数。
  11. 编辑测试类(在本例中为“TestActivityTest”)并创建一个默认构造函数,该构造函数调用 super(Class) 并传入 Android 测试应用程序的类(例如“TestActivity.class”)。

您应该最终得到三个与此类似的项目(Android 库、Android 测试应用程序、Android 库测试器):

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

你应该最终得到一个类来测试你的 Android 库,它看起来类似于:

package danny.remington.remington_android_tools_test_app.test;

import android.test.ActivityInstrumentationTestCase2;
import danny.remington.remington_android_tools_test_app.TestActivity;

/**
 * 
 */
public class TestActivityTest extends
      ActivityInstrumentationTestCase2<TestActivity> {

   public TestActivityTest() {
      super(TestActivity.class);
   }

}

然后,您可以添加所需的任何测试。 您不需要进一步引用 Android 测试应用程序(在此示例中为“RemingtonAndroidToolsTestApp”)来运行您的测试,除非它们需要访问 Android 特定组件(例如 Assets 文件夹)。 如果您需要访问任何 Android 特定组件,您可以通过修改 Android 测试应用程序(在本例中为“RemingtonAndroidToolsTestApp”)然后通过标准 Android Junit API 提供的检测引用它来实现。 (您可以在此处阅读更多相关信息:http ://developer.android.com/tools/testing/testing_android.html

如果您的 ulitiy 类不依赖于任何 android 特定代码,您可以只使用标准的 JUnit 单元测试。 无需使用 Android 版本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM