gradle ошибка compileJava: пакет org.junit.jupiter.api не существует - PullRequest
0 голосов
/ 28 апреля 2019

Мне не удается использовать gradle, чтобы заставить работать тесты JUnit5, compileJava завершается с сообщением, что не может найти org.junit.jupiter.api, несмотря на то, что я поместил его в зависимости.

Я должен скомпилировать некоторый код, который мне дали. У этого есть структура каталогов как это:

├── build.gradle
├── src
│   ├── frame
│   │   ├── CardTestfileReader.java
│   │   ├── PublicTests.java
│   │   └── SortArray.java
│   └── lab
│       ├── Card.java
│       ├── HybridSort.java
│       ├── HybridSortRandomPivot.java
│       └── YourTests.java
└── tests
    └── public
        ├── TestFile1
        ├── TestFile2
        └── TestFile3

Тесты JUnit5 находятся в рамке. PublicTests, мне нужно их запустить.

Мне удалось скопировать этот build.groovy файл, не понимая, что он делает.

plugins {
  id 'java'
  id 'checkstyle'
}

repositories {
  mavenCentral()
}

dependencies {
  testCompile('org.junit.jupiter:junit-jupiter:5.4.2')
  testImplementation('org.junit.jupiter:junit-jupiter:5.4.2')
}

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

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

  test {
    java {
      srcDir 'src'
    }
  }
}

Я надеюсь заставить gradle test работать и как-нибудь запустить модульные тесты.

Ответы [ 2 ]

2 голосов
/ 28 апреля 2019

В Gradle один и тот же проект может иметь несколько конфигураций (например, «основная» и «тестовая»), и каждая конфигурация может иметь свой путь к классам. Вы импортируете зависимости junit5, используя директиву testCompile('org.junit...'); но включает в себя jar junit5 только в конфигурации test .

Обратите внимание, что класс PublicTests находится в main, поэтому Gradle скомпилирует его в конфигурации "main". Если PublicTests ссылается на junit5, то это приведет к ошибке компиляции (поскольку junit5 не включен в "основной" путь к классам).

Короче говоря ... Вы должны поставить все свои тесты под test.

Вы можете проверить путь к классам для каждой конфигурации, вызвав gradle dependencies.

1 голос
/ 28 апреля 2019

У вас есть странная настройка, в которой наборы источников "main" и "test" ссылаются на одну и ту же папку "src".

Итак, PublicTests.java на самом деле в двух исходных наборах (как основной, так и тестовый). Так что на самом деле есть две задачи компиляции, которые указывают на одни и те же источники. «Основной» исходный набор не может быть скомпилирован, потому что junit отсутствует в вашем пути к классам компиляции.

* НЕ УСТАНАВЛИВАЙТЕ JUNIT НА КОМПЛЕКСНЫЙ КЛАССФАТ, ЧТОБЫ ИСПРАВИТЬ ЭТО *

Ваша сборка испорчена, и вам нужно отделить свои тесты от основных источников и прекратить совместное использование папки "src" с обоими наборами источников.

Сделайте себе одолжение и придерживайтесь разумных значений по умолчанию Грэдла. Введите код приложения в src/main/java и тесты в src/test/java

...