Як запустити тести JUnit за допомогою Gradle?


98

На даний момент у мене є такий файл 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, а потім запустити ці тести в папках тестів / моделі ?

Відповіді:


106

Як правильно додати залежність 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набору джерел.
Петер Нідервізер

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 вибирає інший (каталог побудови). Це може призвести до плутанини, якщо ви редагуєте файл ресурсу і не бачите, що ваші зміни відображаються під час виконання тесту.


2
Щоб скерувати файли збірки Eclipse до того самого каталогу, що і Gradle (може запобігти декільком неприємним помилкам): Проект -> Властивості -> Шлях збірки Java -> Вихідна папка за замовчуванням: замініть "bin" на "build". Однак ... на моєму досвіді, здається, це бентежить звичку "сповзати назад" до стандартного "сміттєвого ящика" кожні такі несподівано. Було б непогано знати, чи існує спосіб отримати Eclipse для використання "build" за замовчуванням.
гризун mike

2
@ mike-glodent, наскільки мені відомо, явно не рекомендується спільно використовувати той самий шлях збірки для eclipse і gradle (див., наприклад, discuss.gradle.org/t/… )
mtraut

Добре, я виправлений! ... і я припускаю, що від компіляції до того самого каталогу нічого не можна отримати. Для більшості цілей функція побудови eclipse стає простим інструментом перевірки: "на жаль, це не компілюється через x, y та z".
гризун Майк

1
@DivDiff структура моїх папок src налаштована таким же чином, про який згадувалося вище, але все одно, коли я виконую тест gradle, він нічого не робить. Це взагалі не запускає мої тести. Будь-яка ідея?
Gaurav,

@Gaurav, я запросив вас до чату, щоб ми могли говорити про це в автономному режимі.
DivDiff

15

Якщо ви створили свій проект за допомогою 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.