Gradle找不到我用Kotlin和JUnit 5的测试

时间:2017-12-25 14:11:02

标签: intellij-idea gradle junit kotlin

我已经用Kotlin和Junit 5编写了一些基本的单元测试。不幸的是,当我从Intellij IDEA运行它们时,Gradle找不到测试。 我收到消息"没有给出包括的测试包括:[de.mhaug.phd.btcwallet.BasicTests]"来自Gradle和消息"未收到测试事件"来自Intellij。

有趣的是,使用" ./ gradlew:clean:test"从命令行运行它。报告成功构建。但是,我的第一个测试显然是红色的,所以这表明Gradle没有执行它。

我已经尝试使用更详细的输出运行它,但没有任何帮助。这是一个最小的(不是)工作示例:

package de.mhaug.phd.btcwallet

import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertFalse
import org.junit.jupiter.api.Test

class BasicTests {
  @Test
  fun hey() {
    assertEquals(3,1+1)
  }

  @Test
  fun hey2() {
    assertFalse(3==1+1)
  }
}

这是我的build.gradle:

buildscript {
    ext.kotlin_version = '1.2.10'

    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

group 'de.mhaug.phd'
version '1.0-SNAPSHOT'

apply plugin: 'kotlin'

repositories {
    mavenCentral()
}

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
    compile group: 'org.bouncycastle', name: 'bcprov-jdk16', version: '1.46'
    testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.0.2'
    testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.0.2'
//    testCompile group: 'org.junit.platform', name: 'junit-platform-runner', version: ''
//    testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.0.2'
}

compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

如何让Intellij / Gradle执行我的测试?

4 个答案:

答案 0 :(得分:2)

我认为您运行的测试的特定问题已经或将通过更新所有内容到最新版本(Gradle,Kotlin,IntelliJ等)来解决。此刻一切都在快速发展,所以保持最新状态是必须的。

未收到'

的测试事件

据我所知,这是预期的。关键是,在使用Gradle任务时,要么相信您的测试已运行,要么找出一种方法来显示每次测试的日志记录。

在执行gradle任务时需要进行区分。或者使用IntelliJ'运行测试(例如,通过单击测试旁边的装订线图标)。

从IntelliJ运行。

IntelliJ与Gradle完美集成,从某种意义上说,如果你从IntelliJ运行,那么它不仅会运行测试(通过Gradle?)而且还会显示一些不错的测试结果。 所有这些都适用于JUnit 5,Kotlintest,Spek,使用普通的Gradle或Gradle Kotlin DSL或任何你使用的。

无耻的自我广告:JUnit 5和Gradle(也显示Gradle测试记录):How to use JUnit 5 with Gradle? 和JUnit 5,Kotlintest和Gradle Kotlin DSL:How to run kotlintest tests using the Gradle Kotlin DSL?

运行Gradle任务。

但是,当您使用Gradle工具窗口运行Gradle任务时,您会看到如上所述'未收到测试事件'。我认为这是因为你只是运行一个运行测试的Gradle任务,这与IntelliJ本身没有任何关系,它没有集成在它报告结果 - 它只是打印到命令行

比较运行Kotlin的例子。使用Gradle任务时,它将在build/中输出。但是当你使用gutter图标运行main方法时,所以使用IntelliJ,它将在out/中输出。这是两个不同的事情。

答案 1 :(得分:0)

我在使用Java 11和JUnit 5时遇到了同样的问题。在我公开授课后,它就开始为我工作。

答案 2 :(得分:0)

否,@ JB Nizet的第一条评论指出:在您的JUnit 5依赖项旁边添加test.useJUnitPlatform()。是这样。

http://junit.org/junit5/docs/current/user-guide/#running-tests-build-gradle

test {
    useJUnitPlatform()
}

或:

dependency {
    ...
    // junit 5
    testImplementation ('org.junit.jupiter:junit-jupiter-api')
    testCompile ('org.junit.jupiter:junit-jupiter-params')
    testRuntime ('org.junit.jupiter:junit-jupiter-engine')
    testCompile ('org.mockito:mockito-junit-jupiter')
    test.useJUnitPlatform() // fix "test events not received" bug in IDEA
}

赞他的评论,而不是这个答案!

答案 3 :(得分:0)

我需要添加

        testImplementation(platform("org.junit:junit-bom:5.7.0"))

也是。总之

        // junit 5
        testImplementation(platform("org.junit:junit-bom:5.7.0"))
        testImplementation('org.junit.jupiter:junit-jupiter-api')
        testCompile('org.junit.jupiter:junit-jupiter-params')
        testRuntime('org.junit.jupiter:junit-jupiter-engine')
        testCompile group: 'org.mockito', name: 'mockito-inline', version: '3.2.0'
        test.useJUnitPlatform() // fix "test events not received" bug in IDEA
        testCompile 'com.willowtreeapps.assertk:assertk-jvm:0.23'