当前位置: 首页 > 知识库问答 >
问题:

如何使用JUnit5和Gradle?

公冶鸣
2023-03-14

在成功运行JUnit4测试后,我试图将JUnit5与Gradle一起使用。

[TestEventLogger] Gradle Test Run :test STARTED
[org.gradle.api.internal.tasks.testing.junit.JUnitDetector] test-class-
scan : failed to scan parent class java/lang/Object, could not find the class file
[TestEventLogger]
[TestEventLogger] Gradle Test Run :test PASSED

而我唯一的测试包含

fail("test fails");

我觉得这很奇怪!

我的生成文件是

apply plugin: 'java'

test {
    dependsOn 'cleanTest' // run tests every time

}

sourceSets {
    main {
        java {
            srcDirs 'src'
        }
    }
    test {
        java {
            srcDirs 'test'
        }
    }
}

repositories {
    mavenCentral()
}

dependencies {
    // when using this, it worked with a junit 4 test
//    testCompile 'junit:junit:4.10'
    // this should be needed for junit 5 (using M4 is required since IJ 2017.1.2
    testCompile("org.junit.jupiter:junit-jupiter-api:5.0.0-M4")
}

test {
    testLogging {
        events "passed", "skipped", "failed"
    }
}
package mypackage;

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;

public class HelloWorldTest {
    @Test
    public void testHelloWorld(){
        assertEquals(2, 1+1, "message");
    }
}

我的文件夹结构是,使用包MyPackage

java-template-project
--- src
    --- mypackage
        --- HelloWorld.java
--- test
    --- mypackage
        --- HelloWorldTest.java

在我使用的IntelliJ2017.1.3中,模块结构如下所示

java-template-project
--- java-template-project_main
    --- src/mypackage
        --- HelloWorld(.java)
--- java-template-project_test
    --- test/mypackage
        --- HelloWorldTest(.java)

因为Gradle现在想要源代码和测试在他们自己的包中。

使用gradle在intellij中从JUnit4升级到JUnit5

链接回到上面的问题,并链接到这个Jetbrains博客,它使用了与上面问题相同的行。还链接到:

将JUnit5测试结果与Intellij测试报告集成在一起

testRuntime("org.junit.vintage:junit-vintage-engine:5.0.0-M1")
testRuntime("org.junit.vintage:junit-vintage-engine:4.12.0-M4")

我试着用

testCompile("org.junit.platform:junit-platform-gradle-plugin:1.0.0-M3")
testCompile("org.junit.jupiter:junit-jupiter-engine:5.0.0-M3")

但结果没有改变。

我的模板项目位于https://github.com/phpirates/java-template-project上,但是这个问题应该包含所有必要的信息。

共有1个答案

廖弘量
2023-03-14

您需要两个JUnit版本的引擎,并且需要应用JUnit平台gradle插件。我在你的年级档案里没看到。下面是一个同时执行JUnit4和5的工作gradle构建:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath ("org.junit.platform:junit-platform-gradle-plugin:1.0.0-M4")
    }
}

apply plugin: 'org.junit.platform.gradle.plugin'
...

dependencies {
...
    testCompile("junit:junit:4.12")
    testRuntime("org.junit.vintage:junit-vintage-engine:4.12.0-M4")

    testCompile("org.junit.jupiter:junit-jupiter-api:5.0.0-M4")
    testRuntime("org.junit.jupiter:junit-jupiter-engine:5.0.0-M4")

    // Enable use of the JUnitPlatform Runner within the IDE
    testCompile("org.junit.platform:junit-platform-runner:1.0.0-M4")
}

junitPlatform {
    details 'tree'
}

有关这方面的更多信息,请参见JUnit文档表单。

 类似资料:
  • 问题内容: 如何在Mockito和JUnit 5中使用注入? 在JUnit4中,我可以只使用Annotation。在JUnit5中没有注释吗? 问题答案: 有多种使用Mockito的方法-我将一一介绍。 手动地 无论JUnit版本是什么(或测试框架),都可以使用Works手动创建模拟。 基于注释 使用@Mock -annotation和相应的调用 来创建嘲笑的作品无论JUnit版本(或测试框架,对

  • 如何使用Mockito和JUnit 5的注射? 在JUnit4中,我可以只使用注释。JUnit5中没有注释吗?

  • 使用Gradle及其JUnit4支持,我可以使用选项选择特定的测试,如下所示: 在使用JUnit5 Gradle任务时,此选项无效。当从命令行使用任务时,它会被无人值守地忽略。真正的工作是由完成的,它不支持以下选项: JUnit5插件支持选择特定的测试吗?

  • 我想在Eclipse(Oxygen 4.7.1a)中使用JUnit 5创建一个JUnit测试。这个JUnit测试应该在一个名为test的独立src文件夹中。但是,由于我是JUnit和Java9的新手,我遇到了以下问题。 我不想为此使用像Gradle或Maven这样构建工具。 因为我有两个不同的src文件夹,一个用于项目src,另一个用于测试用例: 我需要两个module-info.java文件吗?

  • IntelliJ IDEA 2018.2.3(Community Edition)中的Kotlin多平台模板在中依赖于JUnit 4.12,用于项目的JVM部分: 值得注意的是,我使用的是Gradle4.10(一些较旧的示例使用,它从Gradle4.6起就被弃用了)。关于如何设置的文档已经过时并且稀少: 如上所示,IntelliJ中构建的默认项目模板不使用JUnit 5。 JUnit团队提供了示例