Gradle не может найти тесты в дополнительном исходном наборе

Моя цель — настроить исходный набор для интеграционных тестов. Я создал исходный набор под названием «intTest». Я положил простой тест внутри:

package com.github.frozensync;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertEquals;

class Application {

    @Test
    @DisplayName("should work")
    void foo() {
        assertEquals(2, 2);
    }
}

Когда я пытаюсь запустить его, я получаю следующую ошибку:

ОШИБКА: Сборка завершилась с ошибкой.
* Что пошло не так:
Не удалось выполнить задачу ':integrationTest'.
> Для заданных тестов не найдено: [com.github.frozensync.Application](filter .includeTestsMatching)
* Попробуйте:
Запустите с параметром --stacktrace, чтобы получить трассировку стека. Запустите с параметром --info или --debug, чтобы получить больше выходных данных журнала. Запустите с --scan, чтобы получить полную информацию.
* Получите дополнительную помощь на https://help.gradle.org
ОШИБКА ПОСТРОЙКИ через 0 мс

Это структура моего проекта:
структура проекта

А это мой build.gradle

plugins {
    id 'java'
}

group 'com.github.frozensync'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

sourceSets {
    intTest {
        compileClasspath += sourceSets.main.output
        runtimeClasspath += sourceSets.main.output
    }
}

idea {
    module {
        testSourceDirs += sourceSets.intTest.java.srcDirs
        testResourceDirs += sourceSets.intTest.resources.srcDirs
    }
}

configurations {
    intTestImplementation.extendsFrom implementation
    intTestRuntimeOnly.extendsFrom runtimeOnly
}

dependencies {
    testImplementation 'org.junit.jupiter:junit-jupiter:5.5.2'
    intTestImplementation 'org.junit.jupiter:junit-jupiter:5.5.2'
}

test {
    useJUnitPlatform()
}

task integrationTest(type: Test) {
    description = 'Runs integration tests.'
    group = 'verification'

    testClassesDirs = sourceSets.intTest.output.classesDirs
    classpath = sourceSets.intTest.runtimeClasspath
    shouldRunAfter test
}

check.dependsOn integrationTest

Я следовал руководству от Gradle. Когда я столкнулся с этой проблемой, я попробовал следующее:
 – Запустите ./gradlew cleanIntegrationTest integrationTest, чтобы обойти IntelliJ, но он по-прежнему выполнил 0 тестов
 – Добавьте плагин Gradle идеи.
— добавьте dependsOn из this.
 — Решения из это.

Как я могу позволить Gradle обнаруживать тесты внутри исходного набора «intTest»?


person Leroy    schedule 22.09.2019    source источник


Ответы (1)


Ваш тест — это тест JUnit 5, но вы не сказали об этом Gradle. Так же, как и для тестового задания нужно вызвать

useJUnitPlatform()

в конфигурации вашей integrationTest задачи.

person JB Nizet    schedule 22.09.2019
comment
тривиальный комментарий/дополнение, но я решил это, используя, чтобы не указывать вещи дважды (делитесь, только если это помогает кому-то другому. tasks.withType(Test) { useJUnitPlatform() } - person Mickelback; 24.06.2020