使用JUnit 5运行Groovy测试用例

时间:2018-10-22 08:23:19

标签: groovy junit5

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

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

这就是我现在拥有的:

项目结构

src
  main
    groovy
      # production code
  test
    groovy
      UnitTest.groovy
build.gradle
...

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()
}

UnitTest.groovy

import org.junit.jupiter.api.Test

class UnitTest {

    @Test
    def shouldDoStuff() {
        throw new RuntimeException()
    }
}

我正在使用Gradle 4.10。

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

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

import org.junit.jupiter.api.Test

public class UnitTest {

    @Test
    Object shouldDoStuff() {
        throw new RuntimeException();
    }
}

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


src / test / groovy / UnitTest.groovy

import org.junit.jupiter.api.Test

class UnitTest {

    @Test
    void shouldDoStuff() {
        throw new RuntimeException()
    }
}

演示:

asciicast