java Gradle 4测试依赖于另一个项目的测试
我有以下多项目结构:
/
build.gradle
common/
build.gradle
src/main/
resources/common.properties
java/...
src/test/
resources/common.properties
java/...
app/
build.gradle
src/main/java/...
src/test/java/...
admin/
build.gradle
src/main/java/...
src/test/java/...
common
项目包含一些常用方法,它们有自己的单元测试和一个CommonDefs
类,其中包含从common.properties
加载的数据。当运行单元测试时,来自测试资源的common.properties
文件可能会覆盖主资源中的文件,并且测试会按预期工作
当为app
和admin
项目运行单元测试时,问题就开始了,这些项目包含使用公共项目中的CommonDefs
的测试
到目前为止,我使用了一种类似于方法described in the following SO answer的通用解决方案,它已经完美地工作了几年。这是根build.gradle
包含的内容:
allprojects {
plugins.withType(JavaPlugin) {
configurations {
testOutput
}
dependencies {
testOutput sourceSets.test.output
}
}
}
和{admin/build.gradle
两者都包含:
dependencies {
compile project(":common")
testCompile project(path: ":common", configuration: "testOutput")
// ...
}
我决定是时候升级Gradle了(以前使用的是2.14.1),所以我开始用Gradle4.2.1测试这个项目。现在,每当我运行app
和admin
的测试时,CommonDefs
从src/main/resources/common.properties
而不是src/test/resources/common.properties
加载数据
我已经尝试打印应用程序项目的测试类路径,Gradle 4.2.1似乎首先使用了common的主JAR:
path\to\app\build\classes\java\test
path\to\app\build\resources\test
path\to\app\build\classes\java\main
path\to\app\build\resources\main
path\to\common\build\libs\common.jar
path\to\common\build\classes\java\test
path\to\common\build\resources\test
对于Gradle 2.14.1,结果是:
path\to\app\build\classes\test
path\to\app\build\resources\test
path\to\app\build\classes\main
path\to\app\build\resources\main
path\to\common\build\classes\test
path\to\common\build\resources\test
path\to\common\build\libs\common.jar
有没有办法告诉较新版本的Gradle将common
的测试输出优先于其主输出
注意
我还尝试在app/build.gradle
中使用以下内容:
evaluationDependsOn(":common")
dependencies {
compile project(":common")
testCompile project(":common").sourceSets.test.output
}
这似乎是可行的,但它看起来相当粗糙,如果可能的话,我想坚持使用配置的解决方案
共 (0) 个答案