Kotlin 测试从命令行使用 ClassNotFoundException 失败,但从 IntelliJ 工作



我这里有一个 Kotlin Spring Boot 项目。它有一些测试,从 IntelliJ 运行良好,但是当我从命令行运行时,失败并出现以下错误。

BUILD FAILED in 1m 12s
7 actionable tasks: 7 executed
asarkar:license-report-kotlin$ ./gradlew clean test
> Task :compileKotlin
Using kotlin incremental compilation
> Task :compileTestKotlin
Using kotlin incremental compilation
> Task :test
2017-07-16 21:43:06.345  INFO 2956 --- [      Thread-13] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@54fa5525: startup date [Sun Jul 16 21:42:04 PDT 2017]; root of context hierarchy
org.abhijitsarkar.ApplicationTest > testEndToEnd FAILED
java.lang.AssertionError at ApplicationTest.kt:83
org.abhijitsarkar.service.GradleAgentTest > initializationError FAILED
java.lang.ClassNotFoundException
org.abhijitsarkar.service.JGitAgentTest > initializationError FAILED
java.lang.ClassNotFoundException
org.abhijitsarkar.service.LinkVerifierTest > initializationError FAILED
java.lang.ClassNotFoundException
4 tests completed, 4 failed

FAILURE: Build failed with an exception.

到目前为止我尝试过:

  1. build.gradlebuild.gradle.kts之间来回走动.
  2. 将 Kotlin 运行时添加到 jarkotlinOptions.includeRuntime = true中。
  3. 将包级别函数更改为对象中的函数。

我觉得很奇怪:

  1. 除了通常的 Gradlebuild目录之外,还会创建一个out目录。
  2. 一些类/对象被编译为名称以Kt结尾的类文件。我没有找到任何押韵或原因,但我仍然是 Kotlin 的新手,所以我可能错过了一些东西。

你的测试(或实际测试的类(做了一些奇怪的事情:它们以某种方式删除了包含测试类的build文件夹的内容。

若要查看此信息,请尝试以下操作:

./gradlew clean testClasses
find build    # You get a full list of all main and test classes
./gradlew clean testClasses test
find build    # You get a very limited list of resources in the build-folder (must be somehow modified by your code)

如果您停用所有测试并仅在其中添加以下内容(仅用于测试目的(:

import io.kotlintest.matchers.*
import io.kotlintest.specs.*
class MyTests : StringSpec() {
init {
"length should return size of string" {
"hello".length shouldBe 5
}
}
}

如果你再次对它进行分级测试,

./gradlew clean testClasses test
find build    # all resources again available

检查测试中是否存在问题。

相关内容

最新更新