gradle compileJava错误:包org.junit.jupiter.api不存在

时间:2019-04-28 15:16:25

标签: 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能够正常工作并以某种方式运行单元测试。

2 个答案:

答案 0 :(得分:2)

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

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

长话短说。您应该将所有测试置于test下。

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

答案 1 :(得分:1)

您有一个奇怪的设置,其中“主要”和“测试”源集都引用相同的“ src”文件夹。

因此,class PythonGame(QtWidgets.QWidget, Ui_Form): def __init__(self, parent=None): QWidget.__init__(self, parent=parent) self.ui = Ui_Form() self.ui.setupUi(self) self.attack_btn.clicked.connect(self, self.start_attack) self.heal_btn.clicked.connect(self, self.heal_hunter) self.start_btn.clicked.connect(self, self.event_start) 实际上位于两个源集中(主要和测试)。因此,实际上有两个编译任务指向完全相同的源。 “主要”源集无法编译,因为junit不在您的编译类路径中。

*请勿将JUNIT放置在编译类路径上以修复此问题*

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

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