java - gradle compileJava错误: package org. junit.jupiter.api不存在

标签 java gradle junit5

我无法设法使用 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 测试在 frame.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 正常工作并以某种方式运行单元测试。

最佳答案

使用 Gradle,同一个项目可以有多个配置(例如“main”和“test”),每个配置可能有不同的类路径。您正在使用指令 testCompile('org.junit...') 导入 junit5 依赖项;但这仅包括 test 配置中的 junit5 jar。

请注意,PublicTests 类位于 main 下,因此 Gradle 将在“main”配置下编译它。如果 PublicTests 引用 junit5,那么这将导致编译错误(因为 junit5 不包含在“主”类路径中)。

长话短说。您应该将所有测试放在 test 下。

您可以通过调用 gradle dependencies 检查每个配置的类路径。

关于java - gradle compileJava错误: package org. junit.jupiter.api不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55891680/

相关文章:

android - Gradle 项目同步失败。 Osmdroid

android - ' :app:processDebugManifest' error while importing project

exception - Kotlin 和 JUnit 5 断言抛出异常 : separate declaration and execution with assertFailsWith

java - IntelliJ IDEA 错过了模块中的测试

java - 噪音()没有给我一个广泛的值

java - 如何衡量时间成本?

java - 等到子线程完成,但不要阻塞主线程

java - 加载 Java .properties 文件,获取 java.util.MissingResourceException : Can't find bundle for base name what am I doing wrong?

kotlin - 在 Kotlin DSL Gradle 上包含/排除标签 Junit5 的正确方法是什么

java - Java8-为什么一个方法需要执行另一个方法作为其参数?