Я наконец смог понять это благодаря некоторой помощи на канале Kotlin Slack.Прежде всего, мне пришлось перейти на версию Gradle 4.10.2.
Для получения дополнительной информации взгляните на эти две страницы из Gradle:
Тогда мне просто нужно было создать исходные наборы для интеграционных тестов
sourceSets {
create("integrationTest") {
kotlin.srcDir("src/integrationTest/kotlin")
resources.srcDir("src/integrationTest/resources")
compileClasspath += sourceSets["main"].output + configurations["testRuntimeClasspath"]
runtimeClasspath += output + compileClasspath + sourceSets["test"].runtimeClasspath
}
}
Это бы отлично работало для Java, но так как я работаю с Kotlin, япришлось добавить дополнительную withConvention
оболочку
sourceSets {
create("integrationTest") {
withConvention(KotlinSourceSet::class) {
kotlin.srcDir("src/integrationTest/kotlin")
resources.srcDir("src/integrationTest/resources")
compileClasspath += sourceSets["main"].output + configurations["testRuntimeClasspath"]
runtimeClasspath += output + compileClasspath + sourceSets["test"].runtimeClasspath
}
}
}
В документах они помещали только runtimeClasspath += output + compileClasspath
, но я добавил sourceSets["test"].runtimeClasspath
, чтобы я мог напрямую использовать тестовые зависимости вместо объявления новых зависимостей для integrationTest
задача.
После создания исходных наборов нужно было объявить о новой задаче
task<Test>("integrationTest") {
description = "Runs the integration tests"
group = "verification"
testClassesDirs = sourceSets["integrationTest"].output.classesDirs
classpath = sourceSets["integrationTest"].runtimeClasspath
mustRunAfter(tasks["test"])
}
После этого тесты все еще не запускались, но это потому, что яиспользуя JUnit4.Поэтому мне просто нужно было добавить useJUnitPlatform()
, что делает его окончательным кодом
task<Test>("integrationTest") {
description = "Runs the integration tests"
group = "verification"
testClassesDirs = sourceSets["integrationTest"].output.classesDirs
classpath = sourceSets["integrationTest"].runtimeClasspath
mustRunAfter(tasks["test"])
useJUnitPlatform()
}