Добавление дополнительного набора тестов в Gradle

Я пытаюсь добавить Gradle (1.4) в существующий проект с несколькими наборами тестов. Стандарт unit test, расположенный в src/test/java, успешно работал, но у меня возникла проблема с настройкой задачи для запуска теста JUnit, расположенного в src/integration-test/java.

Когда я запускаю gradle intTest, я получаю несколько ошибок cannot find symbol для классов в src/main. Это заставляет меня думать, что зависимости настроены неправильно. Как настроить intTest так, чтобы он запускал мои тесты интеграции JUnit?

build.gradle

apply plugin: 'java'

sourceCompatibility = JavaVersion.VERSION_1_6

sourceSets {
    integration {
        java {
            srcDir 'src/integration-test/java'
        }
        resources {
            srcDir 'src/integration-test/resources'
        }
    }
}

dependencies {
    compile(group: 'org.springframework', name: 'spring', version: '3.0.7')

    testCompile(group: 'junit', name: 'junit', version: '4.+')
    testCompile(group: 'org.hamcrest', name: 'hamcrest-all', version: '1.+')
    testCompile(group: 'org.mockito', name: 'mockito-all', version: '1.+')
    testCompile(group: 'org.springframework', name: 'spring-test', version: '3.0.7.RELEASE')

    integrationCompile(group: 'junit', name: 'junit', version: '4.+')
    integrationCompile(group: 'org.hamcrest', name: 'hamcrest-all', version: '1.+')
    integrationCompile(group: 'org.mockito', name: 'mockito-all', version: '1.+')
    integrationCompile(group: 'org.springframework', name: 'spring-test', version: '3.0.7.RELEASE')
}


task intTest(type: Test) {
    testClassesDir = sourceSets.integration.output.classesDir
    classpath += sourceSets.integration.runtimeClasspath
}

Детали: Gradle 1.4

Решение: Я не установил путь для компиляции для набора исходных тестов интеграции (см. ниже). В моем коде я я устанавливаю путь класса компиляции к sourceSets.test.runtimeClasspath, так что у меня нет дубликатов зависимостей для "integrationCompile"

sourceSets {
    integrationTest {
        java {
            srcDir 'src/integration-test/java'
        }
        resources {
            srcDir 'src/integration-test/resources'
        }
        compileClasspath += sourceSets.main.runtimeClasspath
    }
}

Ответ 1

источник "integration" sourceSet не настроил свой путь к компиляции и времени выполнения. Вот почему он не может найти классы из вашего основного источника. вы можете настроить путь к компиляции и времени выполнения следующим образом:

sourceSets {
    integTest {
        java.srcDir file('src/integration-test/java')
        resources.srcDir file('src/integration-test/resources')
        compileClasspath = sourceSets.main.output + configurations.integTest
        runtimeClasspath = output + compileClasspath
    }
}

Ответ 2

В большинстве случаев вы хотите использовать те же зависимости, что и ваши модульные тесты, а также некоторые новые. Это добавит зависимости ваших модульных тестов поверх существующих для тестов интеграции (если они есть).

sourceSets {
    integrationTest {
        compileClasspath += sourceSets.test.compileClasspath
        runtimeClasspath += sourceSets.test.runtimeClasspath
    }
}