Answers:
引用文档:
“有两种建议的方法可以对库项目中的代码和资源进行测试:
您可以设置一个测试项目,以测试依赖于库项目的应用程序项目。然后,您可以将测试添加到项目中以用于特定于库的功能。
您可以建立一个依赖于库的标准应用程序项目,然后将仪器放入该项目中。这使您可以创建一个包含测试/仪器和要测试的代码的独立项目。”
在测试项目中,只需更改程序包名称,使其与库的程序包相同即可。例如,您有一个库,其包为"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
选项卡中显示为库。
然后运行测试。
http://www.paulbutcher.com/2010/09/android-library-project-with-tests-step-by-step/有助于描述在CommonsWare答案中实施第二条建议所需的过程
根据文档:
测试库模块与测试应用程序相同。主要区别在于库及其依赖项会自动包含为测试APK的依赖项。这意味着测试APK不仅包含其自己的代码,而且还包含库的AAR及其所有依赖项。由于没有单独的“正在测试的应用”,因此androidTest任务仅安装(和卸载)测试APK。合并多个清单文件时,Gradle将遵循默认优先级顺序,并将库的清单合并到测试APK的主清单中。
注意: 此解决方案基于使用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 Test App(在此示例中为“ RemingtonAndroidToolsTestApp”)即可运行测试。如果您需要访问任何特定于Android的组件,则可以通过修改Android测试应用程序(此示例中为“ RemingtonAndroidToolsTestApp”),然后通过标准Android Junit API提供的工具进行引用来进行访问。(您可以在此处阅读有关此内容的更多信息:http : //developer.android.com/tools/testing/testing_android.html)
如果您的ulitiy类不依赖于任何android特定代码,则可以使用标准JUnit单元测试。无需使用Android版本。