Не удается получить тестовый код для поиска исходного кода с использованием gradle - PullRequest
0 голосов
/ 10 мая 2018

Я использую Gradle. У меня только один проект, разбитый на исходные файлы, затем тестовые файлы. Мой тестовый код не может видеть исходный код. Когда тестовый код пытается скомпилировать, он просто говорит, что пакеты с исходным кодом отсутствуют. Что дает?

При запуске "gradle build" или "gradle test" я получаю следующее:

What went wrong:
Execution failed for task ':compileTestJava'.
Compilation failed; see the compiler error output for details.

Пример ошибки компиляции (потому что их сотни)

/tst/ContactsTests.java:1: error: package HoaryGuts does not exist
import HoaryGuts.AlertsHandlers;
                ^

Файл Gradle build.gradle:

apply plugin: 'java'

sourceCompatibility = 1.8
targetCompatibility = 1.8
version = '1.0'

repositories {
    mavenCentral()
}

task getHomeDir << {
    println gradle.gradleHomeDir
}

sourceSets {
    source {
        java {
            srcDir "src"
        }
        resources {
            srcDir "resources"
        }
    }
    test {
        java {
            srcDir "tst"
        }
        compileClasspath = compileClasspath + configurations.compileOnly
    }
}

test {
    println "In the test function"
    useTestNG()
    testLogging {
        exceptionFormat = 'full'
    }

    afterTest { desc, result ->
        println "${desc.className} ${desc.name} ${result.resultType}"
    }

    outputs.upToDateWhen {false}
}

dependencies {
    compile group: 'org.testng', name: 'testng', version: '6.9.10'
}

1 Ответ

0 голосов
/ 10 мая 2018

Как и Maven, Gradle использует main для производственных источников.Они обычно определяются в src/main/java для Java, и test включает их так же, как включает в себя compile зависимости наряду с testCompile.

Существует причина, по которой src сопровождается именованной конфигурацией, а затем язык: в вашей настройке вы не предоставляете место для тестовых ресурсов, которые очень распространены, и вы делаете более трудоемким включение в проект других языков JVM, таких как Kotlin или Scala.Возможно, они вам не нужны, но редко бывают веские причины сильно отклоняться от отраслевого стандарта.

В любом случае вы не переместили main в другое место, вы ввели новый источникустановите source в дополнение к main (фактически сохраняя main там, где они были изначально).Если вы просто указали новый srcDir для main вместо введения source (как вы это делали для теста), вам не нужно расширять compileClasspath, и ваши основные источники будут найдены в тесте.

Если вы действительно хотите придерживаться source вместо использования main в новом месте, в test вы должны добавить source compileClasspath и output в путь к классам для теста:

compileClasspath += sourceSets.source.compileClasspath + source.output + [whatever else you want to add]

Но, ну, это плохой выбор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...