如何测试Android库项目

时间:2010-08-30 19:42:36

标签: android junit apk

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

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

6 个答案:

答案 0 :(得分:70)

引用the documentation

“有两种建议的方法可以在库项目中设置代码和资源的测试:

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

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

答案 1 :(得分:17)

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

另外,请确保库在Java构建路径中引用了您的测试项目 NOT ,但是作为通常的Android库:在Eclipse中它必须在Project->Properties->Android中显示为库标签,但Project->Properties->Java Build Path标签中的不是

然后运行测试。

答案 2 :(得分:13)

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

答案 3 :(得分:3)

根据documentation

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

答案 4 :(得分:1)

注意:此解决方案基于使用Eclipse Indigo(3.8.2),并且可能必须针对另一个IDE稍微不同地实现,尽管基本原理将是相同的。

我有类似的问题,我发现以下操作始终有效:

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

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

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

    enter image description here

    enter image description here

    enter image description here

    您最终应该使用一个用于测试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特定组件(例如Assets文件夹),否则您不需要进一步引用Android测试应用程序(在此示例中为“RemingtonAndroidToolsTestApp”)来运行测试。如果您需要访问任何Android特定组件,您可以通过修改Android测试应用程序(在此示例中为“RemingtonAndroidToolsTestApp”),然后通过标准Android Junit API提供的工具来引用它。 (您可以在此处详细了解:http://developer.android.com/tools/testing/testing_android.html

答案 5 :(得分:0)

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