【问题标题】:gradle compileJava error: package org.junit.jupiter.api does not existgradle compileJava错误:包org.junit.jupiter.api不存在
【发布时间】:2019-04-28 15:16:25
【问题描述】:

我无法使用 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 能够以某种方式工作并运行单元测试。

【问题讨论】:

    标签: java gradle junit5


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 代码给了我,我不能改变它的结构。但你是对的。我可以通过将 testCompile('...') 更改为 compile('...') 来让它工作!
    • 不要把junit放在你的编译类路径上!!您最终会将 junit 投入生产! Junit 是一个测试时依赖,它不应该是一个编译/运行时依赖!
    【解决方案2】:

    你有一个奇怪的设置,其中“main”和“test”源集都引用相同的“src”文件夹。

    所以,PublicTests.java 实际上位于两个源集(主集和测试集)中。所以实际上有两个编译任务指向完全相同的源。 “主”源集无法编译,因为 junit 不在您的编译类路径中。

    * 不要将 JUNIT 放在编译类路径中来修复此问题 *

    您的构建被搞砸了,您需要将测试与主要来源分开,并停止与两个来源集共享“src”文件夹。

    帮自己一个忙,坚持 Gradle 的合理默认设置。将您的应用程序代码放入src/main/java,并将您的测试放入src/test/java

    【讨论】:

    • 很好的解释。我试图在 main 而不是 test 中实现我的测试用例。对于我的场景,我不希望它专门用于 main 。所以它对我有用!
    猜你喜欢
    • 2017-07-29
    • 2013-08-21
    • 2014-10-02
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 2018-05-06
    • 1970-01-01
    相关资源
    最近更新 更多