【发布时间】:2019-07-11 21:55:56
【问题描述】:
我们有一个多模块设置,我们在模块之间共享一些测试类(主要是 Fakes 实现)。我们当前的解决方案(您可以在下面找到)仅适用于用 Java 编写的类,但我们正在考虑支持共享的 kotlin 类。
if (isAndroidLibrary()) {
task compileTestCommonJar(type: JavaCompile) {
classpath = compileDebugUnitTestJavaWithJavac.classpath
source sourceSets.testShared.java.srcDirs
destinationDir = file('build/testCommon')
}
taskToDependOn = compileDebugUnitTestSources
} else {
task compileTestCommonJar(type: JavaCompile) {
classpath = compileTestJava.classpath
source sourceSets.testShared.java.srcDirs
destinationDir = file('build/testCommon')
}
taskToDependOn = testClasses
}
task testJar(type: Jar, dependsOn: taskToDependOn) {
classifier = 'tests'
from compileTestCommonJar.outputs
}
如何修改 compileTestCommonJar 使其支持 kotlin?
【问题讨论】:
-
你说的在模块之间共享一些测试类到底是什么意思?这些是实际测试还是只是用于不同项目测试的类?
-
只是类,伪造实现以避免使用模拟
-
所以基本上你的测试依赖于那些类?你为什么不在一个额外的模块中编译这些类,并将这个模块作为
testCompile或testImplementation依赖添加到你的其他模块中。 -
我已经有太多的模块,而 imo 这将是一种解决方法。我已经有了一个使用 Java 文件的可行解决方案……只是想通过编译 Kotlin 代码来使其更灵活
-
使用模块来实现代码可重用性并不是一种解决方法。相反,在 Gradle 构建中手动和有条件地创建任务就是其中之一。