Как запускать тесты JUnit с Gradle?

99

В настоящее время у меня есть следующий файл build.gradle :

apply plugin: 'java'

sourceSets {
    main {
        java {
            srcDir 'src/model'
        }
    }
}

dependencies {
    compile files('libs/mnist-tools.jar', 'libs/gson-2.2.4.jar')
    runtime fileTree(dir: 'libs', include: '*.jar')
}    


Этот build.gradle файл для моего хранилища здесь . Все мои основные файлы находятся в src / model /, а соответствующие тесты - в test / model .

Как мне правильно добавить зависимость JUnit 4, а затем запустить эти тесты в папках тестов / модели ?

Ван-Чжао-Лю Цюй
источник

Ответы:

107

Как правильно добавить зависимость junit 4?

Предполагая, что вы решаете использовать стандартное репо Maven (или эквивалентное):

dependencies {
    ...
    testCompile "junit:junit:4.11"  // Or whatever version
}

Запустить эти тесты в папки с тестами / моделью?

Таким же образом определяется набор источников тестирования:

sourceSets {
    ...

    test {
        java {
            srcDirs = ["test/model"]  // Note @Peter's comment below
        }
    }
}

Затем вызовите тесты как:

./gradlew test

РЕДАКТИРОВАТЬ: если вместо этого вы используете JUnit 5, вам нужно выполнить больше шагов, вы должны следовать этому руководству .

Оливер Чарльзуорт
источник
8
srcDirs = ["test/model"]является немного более точным, потому что он избавляется от каталога исходных текстов тестов по умолчанию, тогда как srcDir "test/model"добавляет другой каталог. То же и с mainисходным набором.
Peter Niederwieser
49

Если вы настроили свой проект со структурой пакета gradle по умолчанию, то есть:

src/main/java
src/main/resources
src/test/java
src/test/resources

тогда вам не нужно будет изменять sourceSets для запуска ваших тестов. Gradle выяснит, что ваши тестовые классы и ресурсы находятся в src / test. Затем вы можете бежать, как говорит Оливер выше. Одно замечание: будьте осторожны при настройке файлов свойств и запуске тестовых классов как с gradle, так и с IDE. Я использую Eclipse, и при запуске JUnit из него Eclipse выбирает один путь к классам (каталог bin), тогда как gradle выбирает другой (каталог сборки). Это может привести к путанице, если вы редактируете файл ресурсов и не видите, что ваши изменения отражаются во время выполнения теста.

DivDiff
источник
2
Чтобы направить файлы сборки Eclipse в тот же каталог, что и Gradle (может предотвратить несколько неприятных ошибок): Project -> Properties -> Путь сборки Java -> Выходная папка по умолчанию: замените «bin» на «build». Однако ... по моему опыту, у этого, кажется, есть обескураживающая привычка время от времени неожиданно "возвращаться" в "корзину" по умолчанию. Было бы неплохо узнать, есть ли способ заставить Eclipse использовать "build" по умолчанию.
Майк грызун
2
@ mike-rodent, насколько я знаю, явно не рекомендуется использовать один и тот же путь сборки для eclipse и gradle (см., например, обсудить.gradle.org/t/… )
mtraut
Хорошо, я исправлюсь! ... и я полагаю, что от компиляции в один и тот же каталог ничего не получится. Для большинства целей функциональность конструктора eclipse становится простым инструментом проверки: «Ой, это не скомпилируется из-за x, y и z».
Майк грызун
1
@DivDiff моя структура папок src настроена таким же образом, как указано выше, но все же, когда я делаю тест Gradle, он ничего не делает. Он вообще не запускает мои тесты. Любая идея?
Gaurav
@Gaurav, я пригласил вас в чат, чтобы мы могли поговорить об этом в автономном режиме.
DivDiff
16

Если вы создали свой проект с помощью Spring Initializr , все должно быть настроено правильно, и все, что вам нужно сделать, это запустить ...

./gradlew clean test --info
  • Отбросьте, --infoесли вы не хотите видеть результаты теста.
  • Отбросьте, cleanесли не хотите повторно запускать тесты, которые уже прошли с момента последнего изменения.

Зависимости, необходимые build.gradleдля тестирования в Spring Boot ...

dependencies {
    compile('org.springframework.boot:spring-boot-starter')
    testCompile('org.springframework.boot:spring-boot-starter-test')
}

По какой-то причине средство запуска тестов не сообщает вам об этом, но создает отчет в формате HTML в формате build/reports/tests/test/index.html.

Брент Брэдберн
источник
0

testCompile устарел. Совместимость с Gradle 7:

dependencies {
...
   testImplementation 'junit:junit:4.13'
}

и если вы используете структуру папок по умолчанию (src / test / java / ...), тестовый раздел будет просто:

test {
    useJUnit()
}

В заключение:

gradlew clean test

См. Также: https://docs.gradle.org/current/userguide/java_testing.html

rob2universe
источник
0

Если вы хотите добавить sourceSet для тестирования в дополнение ко всем существующим, внутри модуля независимо от активного варианта:

sourceSets {
    test {
        java.srcDirs += [
                'src/customDir/test/kotlin'
        ]
        print(java.srcDirs)   // Clean
    }
}

Обратите внимание на оператора, +=и если вы хотите запустить интеграционные тесты, измените его testна androidTest.

GL

Брайан Коронел
источник