Gradle не запускает тесты - PullRequest
1 голос
/ 17 февраля 2020

В моем проекте Gradle у меня очень простой тест JUnit:

import org.junit.jupiter.api.Test
import static org.junit.jupiter.api.Assertions.fail

class ApiCallerTest {

    @Test
    void testSetApiKey() {
        fail();
    }
}

Когда я запускаю тест в IntelliJ, я получаю список задач с сообщением об успешной сборке. Например:

1005

Этого не должно быть, так как я ожидаю, что тест не пройден. Я также получаю сообщение «Тестовые события не были получены».

Это мой файл gradle.build:

plugins {
    id 'groovy'
    id 'java'
}

group 'com.ipdive'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    compile 'org.codehaus.groovy:groovy-all:2.3.11'
    testImplementation('org.junit.jupiter:junit-jupiter:5.6.0')
}

В соответствии с предложениями на inte rnet Я пытался добавить этот код в файл gradle.build.

test {
    useJUnitPlatform()
}

Но это не помогло.

Я также попытался изменить настройку Gradle на «Запуск тестов с использованием» -> «IntelliJ IDEA». Когда я запускаю тест после этого изменения, я получаю сообщение об ошибке:

Internal Error occurred.
org.junit.platform.commons.JUnitException: TestEngine with ID 'junit-jupiter' failed to discover tests
    at org.junit.platform.launcher.core.DefaultLauncher.discoverEngineRoot(DefaultLauncher.java:189)
    at org.junit.platform.launcher.core.DefaultLauncher.discoverRoot(DefaultLauncher.java:168)
    at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:132)
    at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:69)
    at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)
    at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230)
    at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58)
Caused by: org.junit.platform.commons.JUnitException: MethodSelector [className = 'ApiCallerTest', methodName = 'testSetApiKey', methodParameterTypes = ''] resolution failed
    at org.junit.platform.launcher.listeners.discovery.AbortOnFailureLauncherDiscoveryListener.selectorProcessed(AbortOnFailureLauncherDiscoveryListener.java:39)
    at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.resolveCompletely(EngineDiscoveryRequestResolution.java:102)
    at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.run(EngineDiscoveryRequestResolution.java:82)
    at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolver.resolve(EngineDiscoveryRequestResolver.java:113)
    at org.junit.jupiter.engine.discovery.DiscoverySelectorResolver.resolveSelectors(DiscoverySelectorResolver.java:45)
    at org.junit.jupiter.engine.JupiterTestEngine.discover(JupiterTestEngine.java:69)
    at org.junit.platform.launcher.core.DefaultLauncher.discoverEngineRoot(DefaultLauncher.java:181)
    ... 6 more
Caused by: org.junit.platform.commons.PreconditionViolationException: Could not load class with name: ApiCallerTest
...
...

Подскажите, пожалуйста, что мне делать, чтобы я мог запустить свои юнит-тесты с Gradle?


EDIT : добавлен снимок экрана со структурой проекта.

Project structure

Ответы [ 2 ]

2 голосов
/ 17 февраля 2020

Вы можете использовать конфигурацию из официальных junit5-samples . Там вы можете найти проект junit5-jupiter-starter-gradle-groovy, который использует следующую конфигурацию:

plugins {
    id 'groovy'
    id 'eclipse' // optional (to generate Eclipse project files)
    id 'idea' // optional (to generate IntelliJ IDEA project files)
}

repositories {
    mavenCentral()
}

dependencies {
    implementation(localGroovy())
    testImplementation('org.junit.jupiter:junit-jupiter:5.6.0')
}

test {
    useJUnitPlatform()
    testLogging {
        events "passed", "skipped", "failed"
    }
}

Он работает с Gradle 6.0.1, Java 8 и 11.

Для запуска тестов вы можете использовать следующую команду: gradle test или настроить в вашей IDE, как показано:

strong text

Вы увидите что-то вроде:

Testing started at 17:34 ...
> Task :cleanTest
> Task :compileJava NO-SOURCE
> Task :compileGroovy UP-TO-DATE
> Task :processResources NO-SOURCE
> Task :classes UP-TO-DATE
> Task :compileTestJava UP-TO-DATE
> Task :compileTestGroovy UP-TO-DATE
> Task :processTestResources NO-SOURCE
> Task :testClasses UP-TO-DATE
> Task :test
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.codehaus.groovy.reflection.CachedClass$3$1 (file:/C:/Users/jmoreno/.gradle/caches/modules-2/files-2.1/org.codehaus.groovy/groovy-all/2.3.11/f6b34997d04c1538ce451d3955298f46fdb4dbd4/groovy-all-2.3.11.jar) to method java.lang.Object.finalize()
WARNING: Please consider reporting this to the maintainers of org.codehaus.groovy.reflection.CachedClass$3$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
com.example.project.CalculatorTestsJava > addsTwoNumbers() PASSED
com.example.project.CalculatorTestsJava > add(int, int, int)[1] PASSED
com.example.project.CalculatorTestsJava > add(int, int, int)[2] PASSED
com.example.project.CalculatorTestsJava > add(int, int, int)[3] PASSED
com.example.project.CalculatorTestsJava > add(int, int, int)[4] PASSED
com.example.project.CalculatorTests > add(int, int, int)[1] PASSED
com.example.project.CalculatorTests > add(int, int, int)[2] PASSED
com.example.project.CalculatorTests > add(int, int, int)[3] PASSED
com.example.project.CalculatorTests > add(int, int, int)[4] PASSED
com.example.project.CalculatorTests > 1 + 1 = 2() PASSED
Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.0.1/userguide/command_line_interface.html#sec:command_line_warnings
BUILD SUCCESSFUL in 3s
5 actionable tasks: 2 executed, 3 up-to-date
17:34:08: Tasks execution finished ':cleanTest :test --tests *'.

Еще один момент, который необходимо учитывать, - это расположение классов. Согласно документации, когда мы используем плагин groovy , мы можем смешивать файлы java & groovy только в папке groovy, в этом случае класс groovy находится в java папка, в которую мы можем поместить только java файлов.

Важно также использовать правильные зависимости, если вы объявляете разные версии groovy, это может привести к ошибкам компиляции.

0 голосов
/ 18 февраля 2020

Тестовый файл был (по ошибке) создан как Groovy файл. Это можно определить по отсутствующим точкам с запятой в конце операторов импорта или по почти квадратному значку файла в IntelliJ.

Поэтому он должен находиться в папке / test / groovy. Вот почему он не собирал тестовый файл в папке / test / java, потому что не было файла java. Переместившись в нужную папку, Градл поднял ее.

Позже также возникла проблема с версией Groovy. Эти два утверждения сталкивались друг с другом:

compile 'org.codehaus.groovy:groovy-all:2.3.11'
implementation(localGroovy())

Следует использовать только одно из них.

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