我正在编写一个基于Android Bitmap类(称为AndroindLib)的Android库项目,该类仅包含实用程序类(无活动)。我尝试使用Android JUnit测试它,但它一直在抱怨无法找到AnroidLib.apk
单元测试Android库项目的正确方法是什么?
答案 0 :(得分:70)
“有两种建议的方法可以在库项目中设置代码和资源的测试:
您可以设置一个测试项目来检测依赖于库项目的应用程序项目。然后,您可以为项目添加测试以获取特定于库的功能。
您可以设置依赖于库的标准应用程序项目,并将检测项目放入该项目中。这使您可以创建一个包含测试/工具和要测试的代码的自包含项目。“
答案 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)
测试库模块与测试应用程序相同。 主要区别在于库及其依赖项自动包含在测试APK的依赖项中。这意味着测试APK不仅包括自己的代码,还包括库的AAR及其所有依赖项。因为没有单独的应用程序正在测试中," androidTest任务只安装(和卸载)测试APK。 合并多个清单文件时,Gradle将遵循默认优先级顺序,并将库的清单合并到测试APK的主要清单中。
答案 4 :(得分:1)
注意:此解决方案基于使用Eclipse Indigo(3.8.2),并且可能必须针对另一个IDE稍微不同地实现,尽管基本原理将是相同的。
我有类似的问题,我发现以下操作始终有效:
( 注意:这些说明适用于从头开始构建新项目组。如果您已经构建了项目组的一部分,那么您可能必须修改项目以便它们连接在一起方式。 强>)
您应该最终得到三个与此类似的项目(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特定组件(例如Assets文件夹),否则您不需要进一步引用Android测试应用程序(在此示例中为“RemingtonAndroidToolsTestApp”)来运行测试。如果您需要访问任何Android特定组件,您可以通过修改Android测试应用程序(在此示例中为“RemingtonAndroidToolsTestApp”),然后通过标准Android Junit API提供的工具来引用它。 (您可以在此处详细了解:http://developer.android.com/tools/testing/testing_android.html)
答案 5 :(得分:0)
如果您的实用程序类不依赖于任何特定于Android的代码,则可以使用标准的JUnit单元测试。无需使用Android版本。