如何在我的Kotlin + Gradle项目中编译和运行我的JUnit测试?

时间:2016-11-03 01:05:57

标签: intellij-idea gradle junit kotlin

我根据this previous question创建了一个Kotlin + Gradle项目。我添加了两个源文件:

的src / HelloWorld.kt

package com.example.hello

fun main(args : Array<String>) { 
  println("Hello, world!") 
}

测试/ HelloWorldTest.kt

package com.example.hello

import org.junit.Assert
import org.junit.Test

class HelloWorldTest {
    @Test
    fun testPasses() {
        Assert.assertTrue(true)
    }

    @Test
    fun testFails() {
        Assert.assertTrue(false)
    }
}

我还将目录src/标记为源根目录,将test/标记为测试源根目录。

如果我在其他地方创建与这些源文件完全相同的目录结构并在其周围创建非Gradle IntelliJ项目,我就能够编译并运行此代码,包括测试。

但是,在我的项目的Gradle版本中,我无法从IntelliJ IDEA构建测试。我收到以下错误:

Error:(3, 12) Kotlin: Unresolved reference: junit
Error:(4, 12) Kotlin: Unresolved reference: junit
Error:(7, 6) Kotlin: Unresolved reference: Test
Error:(9, 9) Kotlin: Unresolved reference: Assert
Error:(12, 6) Kotlin: Unresolved reference: Test
Error:(14, 9) Kotlin: Unresolved reference: Assert

奇怪的是,如果我在构建包装器后运行gradle test(或./gradlew test),则构建成功且没有错误,但测试不会运行。

  1. 如何以IntelliJ IDEA可以看到的方式添加JUnit?
  2. 如何让Gradle实际运行测试?
  3. 为什么IntelliJ IDEA和Gradle的行为方式不同,如何在将来构建或运行测试时确保它们具有相同的行为?

1 个答案:

答案 0 :(得分:4)

您需要将JUnit添加为build.gradle(根范围)的依赖项:

dependencies {
    //... 
    testCompile "junit:junit:4.12"
}

对于Junit 5来说有点复杂,它需要build.gradle中的configuring the JUnit Gradle plugin

  1. 由于IntelliJ IDEA解释您的Gradle项目并将其内部项目表示与Gradle项目同步,因此在刷新后它将在测试类路径中看到JUnit。

  2. 如果您运行test任务,Gradle将运行测试,方法是在终端或IntelliJ IDEA中运行gradlew test Gradle项目(右侧面板)任务验证测试

  3. 如#1中所述,IntelliJ IDEA有自己的项目表示,它实际上可能与从Gradle项目导入的内容不同(例如,如果您手动将源目录标记为与Gradle项目布局定义的源目录不同) 。

    您可以通过运行刷新所有Gradle项目操作使IntelliJ IDEA与您的build.gradle同步其项目结构(可在 Gradle项目面板中找到) ,或在“设置”中为您的Gradle项目启用使用自动导入