如何testing一个Android库项目

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

什么是unit testingAndroid库项目的正确方法?

引用文档 :

“有两个build议的方法来设置对库项目中代码和资源的testing:

  • 您可以设置一个testing项目,用于处理依赖于库项目的应用程序项目。 然后,您可以将testing添加到项目中以获取特定于库的function。

  • 您可以build立一个依赖库的标准应用程序项目,并将该项目放入该项目中。 这使您可以创build一个包含testing/testing和testing代码的自包含项目。“

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

另外,请确保库不是在Java构buildpath中引用到您的testing项目,而是作为一个通常的Android库:在Eclipse中,它必须在Project->Properties->Android选项卡中显示为库,但不能Project->Properties->Java Build Path选项卡。

然后运行你的testing。

根据文档 :

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

如果你的ulitiy类不依赖任何android特定的代码,你可以使用标准的JUnitunit testing。 无需使用Android版本。

注意:这个解决scheme基于使用Eclipse Indigo(3.8.2),对于另一个IDE可能需要稍微不同的实现,尽pipe基本原则是相同的。

我有类似的问题,我发现以下做法始终工作:

注意:这些说明是为了从头开始构build一个新的项目组,如果你已经构build了项目组的一部分,那么你可能需要修改你的项目,以便以相同的方式进行连接。

  1. 通过在创build过程中选中“Is Library”checkbox来创build一个新的Android库项目。 (例如名为“RemingtonAndroidTools”的Android项目)。
  2. 构buildAndroid库项目并validation它是否在bin文件夹中创build了一个jar文件。 (例如名为“RemingtonAndroidTools.jar”的jar文件)。
  3. 创build一个空的Android项目,用于testing将作为Androidtesting应用程序的Android应用程序。 (例如名为“RemingtonAndroidToolsTestApp”的Android项目)。 您不需要修改Androidtesting应用程序项目的源代码或资源,除非您有必须添加的testing项目。 很多事情都可以在没有任何修改的情况下进行testing。 Androidtesting应用程序项目是Android库项目和Android Junit项目之间的桥梁,通过Android JunittestingAndroid库项目成为可能。
  4. 转到Androidtesting应用程序项目(本例中为“RemingtonAndroidToolsTestApp”)的Java Build Path的Library选项卡。
  5. 通过“Add Jars …”button添加Android库项目(本例中为“RemingtonAndroidTools”)的jar文件(本例中为“RemingtonAndroidTools.jar”)。
  6. 创build一个新的Androidtesting项目(例如“RemingtonAndroidToolsTester”)作为Android库testing器,并selectAndroidtesting应用项目(本例中为“RemingtonAndroidToolsTestApp”)作为目标。
  7. 转到Android库testing器项目(本例中为“RemingtonAndroidToolsTester”)的Java Build Path的库选项卡。
  8. 通过“Add Jars …”button添加Android库项目(本例中为“RemingtonAndroidTools”)的jar文件(本例中为“RemingtonAndroidTools.jar”)。
  9. 在Android Library Tester项目(例如“danny.remington.remington_android_tools_test_app.test”)中查找Android包的最后一个文件夹,并添加一个从ActivityInstrumentationTestCase2inheritance的testing类(例如“MainActivityTest”)。
  10. 编辑testing类(本例中为“TestActivityTest”),以使用Android Test应用程序(本例中为“RemingtonAndroidToolsTestApp”)的活动(例如“TestActivity”)作为ActivityInstrumentationTestCase2的参数。
  11. 编辑testing类(本例中为“TestActivityTest”),并创build一个默认的构造函数,调用super(Class)并传入Android Test App的类(例如“TestActivity.class”)。

你最终应该看到三个类似于以下内容的项目(Android库,Androidtesting应用程序,Android库testing器):

在这里输入图像说明

在这里输入图像说明

在这里输入图像说明

你最终应该有一个类来testing你的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); } } 

然后,您可以添加任何你想要的testing。 除非需要访问特定于Android的组件(例如,Assets文件夹),否则您将不需要引用Android Test App(本例中的“RemingtonAndroidToolsTestApp”)来进一步运行testing。 如果您需要访问任何Android特定组件,您可以通过修改Androidtesting应用程序(本例中的“RemingtonAndroidToolsTestApp”),然后通过标准Android Junit API提供的工具来引用它。 (你可以阅读更多关于这里: http : //developer.android.com/tools/testing/testing_android.html )