我怎样才能让我的JUnit测试在我的Kotlin + Gradle项目中编译和运行?
根据上一个问题,我创建了一个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/
目录标记为源根目录,并将其作为测试源根目录。
如果我在其他地方创建与这些源文件完全相同的目录结构,并创建一个非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
)构建成功没有错误,但测试不运行。
- 如何以IntelliJ IDEA可以看到的方式添加JUnit?
- 如何让Gradle实际运行测试?
- 为什么IntelliJ IDEA和Gradle的行为不同,我怎样才能确保在将来构建或运行测试时它们具有相同的行为?
您需要将JUnit作为依赖添加到您的build.gradle
(根作用域)中:
dependencies { //... testCompile "junit:junit:4.12" }
对于Junit 5来说更复杂一些,它需要在build.gradle
配置JUnit Gradle插件
-
由于IntelliJ IDEA将解释您的Gradle项目,并将其内部项目表示与Gradle项目同步,所以在刷新之后,它将在测试类路径中看到JUnit。
-
如果运行
test
任务,Gradle将运行test
任务,通过在终端或IntelliJ IDEA中运行gradlew test
: Gradle项目(右侧面板) → 任务 → 验证 → 测试 。 -
如#1所述,IntelliJ IDEA具有自己的项目表示,实际上它可能与从Gradle项目导入的项目不同(例如,如果您手动将源目录标记为与Gradle项目布局定义的源目录不同)。
通过运行刷新所有Gradle项目操作(可以在Gradle项目面板中找到),或者在设置中为您的Gradle项目启用使用自动导入 ,您可以使IntelliJ IDEA与您的
build.gradle
同步其项目结构。