Chr*_*rry 1 android unit-testing maven android-maven-plugin
所以我在我编写的模块中有一些类来帮助进行Robolectric样式单元测试,我希望能够在一堆其他模块中共享这个模块.这个模块有自己的单元测试,我把它设置为apklib.我正在使用maven-android-plugin.问题似乎是它不能识别测试范围内的apklibs.有没有解决方法,或者我错过了什么?
我注意到的一件事是,如果我运行命令mvn install,所有构建和我的所有测试运行正常,但如果我这样做mvn test说它找不到类.
Maven有这个"反应堆"的概念,这对于正在建造的项目清单来说只是一个奇特的术语.在Maven构建开始时,最后,Maven打印出这个项目列表(使用/project/name(XPath),如果已定义或groupId:artifactId其他).
对于反应堆中的每个项目,Maven维护一个已附加的工件列表.默认情况下,每个模块pom.xml都是附加的,并且在每个插件运行时,它们都可以选择附加其他工件.大多数插件都没有附加工件,这里有一些插件可以:
jar:jar创建一个.jar并将其作为主要工件附加(除非您在配置中指定分类器)war:war创造.war并附加它source:jar创建.jar源Java代码并使用分类器附加它sourcejavadoc:jar创建一个.jarJavaDocs并使用它的分类器附加它javadocandroid:apklib创建.apklib工件并将其作为主要工件附加还有一个默认的主要工件(这是由jar:jar替换的工件),它实际上是一个目录而不是文件,因此它不会安装或部署到本地存储库缓存或远程存储库.
因此,当在反应堆中,并且附加主工件的插件尚未运行(在您的情况下android:apklib),并且另一个插件请求主工件时,它将被赋予目录${project.build.outputDirectory}.如果在附加了主要工件之后,则将提供该主要工件.
该test阶段发生的前package阶段,所以会通过目录,而不是.apklib.
在多模块项目中,事情变得更加复杂(这是我的长篇介绍应该帮助你的地方)
Maven必须构建测试类路径.如果其中一个依赖项位于反应堆内,Maven将使用连接到反应堆的工件.否则,它将使用本地缓存(如有必要,从远程存储库填充).
当你跑步
mvn test
Run Code Online (Sandbox Code Playgroud)
在根目录的multimdule项目中,没有替换默认的(基于目录的)工件,因此模块内类路径将是目标/类目录(我们假设android插件知道如何处理这样的测试......你发现它没有).
当你跑步
mvn package
Run Code Online (Sandbox Code Playgroud)
要么
mvn install
Run Code Online (Sandbox Code Playgroud)
但是,在同一个项目中,由于每个模块按顺序完成其生命周期,因此所有相关模块都将交换其.apklib文件作为其附加工件.
最有可能的问题是,您的测试不适用于目录并需要实际.apklib文件.在这种情况下,您别无选择,只能将生命周期推至至少package阶段.
| 归档时间: |
|
| 查看次数: |
715 次 |
| 最近记录: |