我根据this previous question创建了一个Kotlin + Gradle项目。我添加了两个源文件:
package com.example.hello
fun main(args : Array<String>) {
println("Hello, world!")
}
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
),则构建成功且没有错误,但测试不会运行。
答案 0 :(得分:4)
您需要将JUnit添加为build.gradle
(根范围)的依赖项:
dependencies {
//...
testCompile "junit:junit:4.12"
}
对于Junit 5来说有点复杂,它需要build.gradle
中的configuring the JUnit Gradle plugin
由于IntelliJ IDEA解释您的Gradle项目并将其内部项目表示与Gradle项目同步,因此在刷新后它将在测试类路径中看到JUnit。
如果您运行test
任务,Gradle将运行测试,方法是在终端或IntelliJ IDEA中运行gradlew test
: Gradle项目(右侧面板)→任务→验证→测试。
如#1中所述,IntelliJ IDEA有自己的项目表示,它实际上可能与从Gradle项目导入的内容不同(例如,如果您手动将源目录标记为与Gradle项目布局定义的源目录不同) 。
您可以通过运行刷新所有Gradle项目操作使IntelliJ IDEA与您的build.gradle
同步其项目结构(可在 Gradle项目面板中找到) ,或在“设置”中为您的Gradle项目启用使用自动导入。