我觉得围绕如何使用JUnit测试Android库项目存在很多困惑。
我将描述迄今为止我遇到的所有错误(为了其他程序员试图做同样的事情),最后我会指定我最后一个和当前的问题。试图使用JUnit测试库的考验
由于图书馆不是一个应用程序,它不会在
bin
目录产生.apk
文件,只是一个.jar
文件,,你需要一个.apk
使用Android的JUnit测试所以您肯定需要为测试创建一个新项目,请按照this guide
注意:即使指南告诉您使用TestCase
及其派生类AndroidTestCase
,但有几篇帖子似乎指出TestCase
仅用于JUnit3测试,JUnit4测试不会扩展任何类。
我不知道当我想要运行一个使用Android API的测试时,如果你想在JUnit4下使用它,我还没有达到那个点。对于不使用Android API的测试,请使用JUnit4样式类。如果您仅按照指南进行操作,则测试将失败“值为无效布局...”。这是因为运行配置包括Android的类路径。转至测试的JUnit测试运行配置(右键单击测试 - >属性 - >运行/调试设置 - >编辑),然后从classPath boostrap条目中移除Android。
编辑
当你首次运行时间的考验,在Eclipse中,你要选择,如果你选择了Android启动,无需使用哪种启动“Eclipse的JUnit的启动器”或“Android的JUnit测试启动器”删除引导条目。从现在开始我没有成功。对于使用Android API的测试,请扩展
AndroidTestCase
。这些测试将需要更长的时间才能启动,即使您不是测试应用程序本身,也需要运行仿真程序,但是没有用户界面的实用程序类。要运行Android UNIT大小写测试,启动程序将查找库目标项目没有的目标程序包APK文件。
当您按照#2中的指南进行操作时,目标软件包会自动插入测试项目的清单中。在测试项目清单应该是这样的:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.Common.lib.test" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="14" /> <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.Common.lib" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <uses-library android:name="android.test.runner" /> </application> </manifest>
这里,目标包是我想测试库。给出了一个解决方案in this post它将测试项目作为具有APK的应用程序使用。所以,现在我改变了目标包从
android:targetPackage="com.Common.lib" />
到
android:targetPackage="com.Common.lib.test" />
但仍然发射查找图书馆APK,即使我添加了图书馆作为参考测试项目,请参阅下面的logcat(注意CommonLibTest.apk已成功加载):
[2014-02-24 16:17:50 - CommonLibTest] Dx trouble writing output: already prepared [2014-02-24 16:17:51 - CommonLibTest] ------------------------------ [2014-02-24 16:17:51 - CommonLibTest] Android Launch! [2014-02-24 16:17:51 - CommonLibTest] adb is running normally. [2014-02-24 16:17:51 - CommonLibTest] Performing android.test.InstrumentationTestRunner JUnit launch [2014-02-24 16:17:51 - CommonLibTest] Automatic Target Mode: using existing emulator 'emulator-5554' running compatible AVD 'Phone-x86-jb' [2014-02-24 16:17:51 - CommonLibTest] Uploading CommonLibTest.apk onto device 'emulator-5554' [2014-02-24 16:17:52 - CommonLibTest] Installing CommonLibTest.apk... [2014-02-24 16:17:52 - CommonLibTest] Success! [2014-02-24 16:17:52 - CommonLib] Could not find CommonLib.apk! [2014-02-24 16:17:52 - CommonLibTest] Launching instrumentation android.test.InstrumentationTestRunner on emulator-5554 [2014-02-24 16:17:53 - CommonLibTest] Test run failed: Instrumentation run failed due to 'java.lang.ClassNotFoundException'
这就是我得到的。
如果想要相信某人已经使用JUnit成功地测试了一个库项目并解决了我的问题。