使用JUnit 5运行Groovy测试用例

pst*_*cki 2 groovy junit5

也许这很简单,但是我在网上找不到任何示例:

我想使用JUnit 5运行作为Groovy类实现的单元测试。我当前的设置似乎启动了JUnit 5,但是无法检测到测试用例。IntelliJ可以识别测试,但无法运行。如果添加Java单元测试,则可以正确启动。

这是我现在所拥有的:

项目结构

src
  main
    groovy
      # production code
  test
    groovy
      UnitTest.groovy
build.gradle
...
Run Code Online (Sandbox Code Playgroud)

build.gradle

plugins {
    id 'groovy'
}

dependencies {
    compile localGroovy()

    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.1.1'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.1.1'
}

test {
    useJUnitPlatform()
}
Run Code Online (Sandbox Code Playgroud)

单元测试

import org.junit.jupiter.api.Test

class UnitTest {

    @Test
    def shouldDoStuff() {
        throw new RuntimeException()
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用Gradle 4.10。

有任何想法吗?

Szy*_*iak 5

JUnit要求所有测试方法都使用返回类型void。Groovy的def关键字被编译为Object类型,因此您的方法在Java中将编译为以下形式:

import org.junit.jupiter.api.Test

public class UnitTest {

    @Test
    Object shouldDoStuff() {
        throw new RuntimeException();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您将其作为Java测试进行尝试,则也不会找到该测试用例。解决方案非常简单-替换defvoid,您的Groovy测试用例将正确执行。


src / test / groovy / UnitTest.groovy

import org.junit.jupiter.api.Test

class UnitTest {

    @Test
    void shouldDoStuff() {
        throw new RuntimeException()
    }
}
Run Code Online (Sandbox Code Playgroud)

演示:

航天员