我使用kotlinpoet来自动生成一些工厂文件。在测试套件本身,我需要根据一些测试参数生成工厂,然后编译源文件并类加载它们,这样我就可以创建一个示例来进行进一步的测试。
我通过Gradle做了一些事情,但是当我尝试这样做时,我遇到了循环依赖的问题(有很好的理由):
// Custom task to pre-generate factories needed for tests
task generateFactories(type: JavaExec) {
mainClass = "com.factories.GenerateTestFactories"
classpath = sourceSets.test.runtimeClasspath
doLast {
println "Factory generation completed"
}
}
compileTestKotlin.dependsOn(generateFactories)
test.dependsOn generateFactories
字符串
因此,我实际上需要它在测试根目录下的特定目录上进行第二次传递,以便我的测试可以类加载新编译的代码。
1条答案
按热度按时间w46czmvw1#
当您执行测试时,您处于一个Gradle任务中,该任务本身在一个单独的环境中执行代码。正如您所总结的那样,尝试从那里启动Gradle任务不会顺利。首先,您需要一个全新的Gradle调用。
或者,您可以生成源文件,重新编译并类加载新类,所有这些都在您的测试中进行,而无需Gradle的帮助。如果您有很多案例需要测试,那么您可能需要这样做,但这听起来很难。
我建议更可行的方法是: