如何测试Android库项目

如何测试Android库项目,android,junit,apk,Android,Junit,Apk,我正在基于Android位图类(称之为AndroidLib)编写一个Android库项目,该类只包含实用程序类(无活动)。我试图用Android JUnit测试它,但它一直抱怨找不到AnroidLib.apk 对Android库项目进行单元测试的正确方法是什么?如果您的ulitiy类不依赖于任何特定于Android的代码,那么您可以使用标准的JUnit单元测试。无需使用Android版本。引用: “建议使用两种方法对库项目中的代码和资源进行测试: 您可以设置一个测试项目,用于检测依赖于库项目的

我正在基于Android位图类(称之为AndroidLib)编写一个Android库项目,该类只包含实用程序类(无活动)。我试图用Android JUnit测试它,但它一直抱怨找不到AnroidLib.apk


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

如果您的ulitiy类不依赖于任何特定于Android的代码,那么您可以使用标准的JUnit单元测试。无需使用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构建路径
选项卡中显示为而不是


然后运行测试。

注意:此解决方案基于使用EclipseIndigo(3.8.2),可能必须对另一个IDE进行稍微不同的实现,尽管基本原理相同

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

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

  • 在创建过程中选中“Is Library”复选框,创建一个新的Android库项目。(例如一个名为“RemingtonAndroidTools”的Android项目)
  • 构建Android库项目并验证它是否在bin文件夹中创建了一个jar文件。(例如,一个名为“RemingtonAndroidTools.jar”的jar文件。)
  • 创建一个空的Android项目,用于测试将用作Android测试应用程序的Android应用程序。(例如一个名为“RemingtonAndroidToolsTestApp”的Android项目)。您将不需要修改Android测试应用程序项目的源代码或资源,除非您有一些必须添加以进行测试的内容。许多东西都可以在不修改Android测试应用程序项目的情况下进行测试。Android测试应用程序项目是您的Android库项目和Android Junit项目之间的桥梁,它使通过Android Junit测试Android库项目成为可能
  • 转到Android测试应用程序项目的Java构建路径的Library选项卡(本例中为“RemingtonAndroidToolsTestApp”)
  • 通过“addjars…”按钮添加Android库项目的jar文件(本例中为“RemingtonAndroidTools.jar”)(本例中为“RemingtonAndroidTools”)
  • 创建一个新的Android测试项目(例如“RemingtonAndroidToolsTester”),作为Android库测试人员,并选择Android测试应用程序项目(本例中为“RemingtonAndroidToolsTestApp”)作为目标
  • 转到Android Library Tester项目的Java构建路径的Library选项卡(本例中为“RemingtonAndroidToolsTester”)
  • 通过“addjars…”按钮添加Android库项目的jar文件(本例中为“RemingtonAndroidTools.jar”)(本例中为“RemingtonAndroidTools”)
  • 在Android Library Tester项目中找到您的Android软件包的最后一个文件夹(“danny.remington.remington\u Android\u tools\u test\u app.test”,例如),并添加从ActivityInstrumentationTestCase2继承的测试类(“MainActivityTest”)
  • 编辑测试类(“本例中的TestActivityTest”)以使用Android测试应用程序(“本例中的RemingtonAndroidToolsTestApp”)的活动(例如“TestActivity”)作为ActivityInstrumentationTestCase2的参数
  • 编辑测试类(“本例中为TestActivityTest”),并创建一个默认构造函数,该构造函数调用super(class)并传入Android测试应用程序的类(“例如TestActivity.class”)
  • 您应该完成三个项目(Android Library、Android Test App、Android Library Tester),它们看起来与此类似:

    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库,该类类似于:

    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);
       }
    
    }
    
    包danny.remington.remington\u android\u tools\u test\u app.test;
    导入android.test.ActivityInstrumentationTestCase2;
    导入danny.remington.remington\u android\u tools\u test\u app.TestActivity;
    /**
    * 
    */
    公共类TestActivityTest扩展
    ActivityInstrumentationTestCase2{
    公共测试活动测试(){
    super(TestActivity.class);
    }
    }
    
    然后,您可以添加所需的任何测试。除非测试需要访问特定于Android的组件(例如,资产文件夹),否则运行测试时无需进一步引用Android测试应用程序(本例中为“RemingtonAndroidToolsTestApp”)。如果您需要访问任何特定于Android的组件,您可以通过修改Android测试应用程序(“本例中为RemingtonAndroidToolsTestApp”),然后通过