Kotlin Добавить модуль интеграционных тестов
Я пытаюсь добавить еще один модуль в свой проект Kotlin специально для интеграционных тестов - жить в соответствии со стандартом test
создание модуля с помощью плагина kotlin. Вот моя текущая конфигурация, чтобы добавить sourceset
:
sourceSets {
testIntegration {
java.srcDir 'src/testIntegration/java'
kotlin.srcDir 'src/testIntegration/kotlin'
resources.srcDir 'src/testIntegration/resources'
compileClasspath += main.output
runtimeClasspath += main.output
}
}
configurations {
provided
testCompile.extendsFrom provided
testIntegrationCompile.extendsFrom testCompile
testIntegrationRuntime.extendsFrom testRuntime
}
task testIntegration(type: Test) {
testClassesDirs = sourceSets.testIntegration.output.classesDirs
classpath = sourceSets.testIntegration.runtimeClasspath
}
Кажется, это работает, однако IntelliJ не выбирает новый исходный набор в качестве тестового модуля. Я могу пометить его вручную, но он сбрасывается при каждом запуске Gradle. Это также означает, что Intellij заполняет Output Path
а не Test Output Path
поля в настройках структуры проекта.
Чтобы исправить это, работает следующая конфигурация:
apply plugin: 'idea'
idea {
module {
testSourceDirs += project.sourceSets.testIntegration.java.srcDirs
testSourceDirs += project.sourceSets.testIntegration.kotlin.srcDirs
testSourceDirs += project.sourceSets.testIntegration.resources.srcDirs
}
}
Тем не менее, это, кажется, инструктирует IntelliJ, что Test Output Path
является \out\test\classes
который аналогичен стандартному модулю 'test' и вызывает проблемы с конфликтами. Я хочу, чтобы сохранить выходной путь как оригинал \out\testIntegration\classes
который в противном случае был бы использован.
Есть ли способ проинструктировать IntelliJ правильно подобрать этот новый источник тестирования и заполнить правильный выходной путь?
1 ответ
Если вы хотите настроить плагин idea gradle со своими пользовательскими тестовыми наборами источников в скрипте сборки kotlin gradle, вы можете сделать это следующим образом:
val testIntegrationSrcDirName = "testIntegration"
sourceSets {
...
create(testIntegrationSrcDirName) {
compileClasspath += sourceSets.main.get().output + sourceSets.test.get().output // take also unit test source and resources
runtimeClasspath += sourceSets.main.get().output + sourceSets.test.get().output // take also unit test source and resources
}
}
...
idea {
module {
testSourceDirs = testSourceDirs + sourceSets[testIntegrationSrcDirName].allSource.srcDirs
}
}
val testIntegrationImplementation: Configuration by configurations.getting {
extendsFrom(configurations.implementation.get())
}
configurations["${testIntegrationSrcDirName}RuntimeOnly"].extendsFrom(configurations.runtimeOnly.get())
...