我正在编写一个基于 Android Bitmap 类(称为 AndroindLib)的 Android 库项目,它只包含实用程序类(无活动)。我尝试使用 Android JUnit 对其进行测试,但它一直抱怨找不到 AnroidLib.apk
单元测试 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 Build Path
选项卡中。
然后运行你的测试。
根据文档:
测试库模块与测试应用程序相同。主要区别在于库及其依赖项会自动包含为测试 APK 的依赖项。这意味着测试 APK 不仅包括它自己的代码,还包括库的 AAR 及其所有依赖项。因为没有单独的“正在测试的应用程序”,所以 androidTest 任务仅安装(和卸载)测试 APK。当合并多个 manifest 文件时,Gradle 遵循默认的优先级顺序,将库的 manifest 合并到测试 APK 的主 manifest。
注意: 此解决方案基于使用 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 测试应用程序(本例中为“RemingtonAndroidToolsTestApp”)来运行您的测试,除非它们需要访问 Android 特定组件(例如 Assets 文件夹)。如果您需要访问任何 Android 特定组件,您可以通过修改 Android 测试应用程序(本例中为“RemingtonAndroidToolsTestApp”)然后通过标准 Android Junit API 提供的工具引用它来实现。(您可以在这里阅读更多相关信息:http: //developer.android.com/tools/testing/testing_android.html)
如果你的 ulitiy 类不依赖于任何 android 特定的代码,你可以使用标准的 JUnit 单元测试。无需使用安卓版本。