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())
... 



 
Другие вопросы по тегам