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

问题描述 投票:0回答:2

我无法使用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,我需要运行它们。

我设法copypasta这个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
2个回答
2
投票

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

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

长话短说..你应该把你所有的测试都放在test下。

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


1
投票

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

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

*请勿将JUNIT放在编译CLASSPATH上以修复此*

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

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

© www.soinside.com 2019 - 2024. All rights reserved.