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] scaAnnotationConfigApplicationContext : 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运行时添加到jar kotlinOptions.includeRuntime = true
  3. 将包级别函数更改为对象中的函数。

我发现奇怪的是:

  1. 除了通常的Gradle build目录以外,还创建了一个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 } } } 

如果你再次进行gradle-test,

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

检查你的测试的问题。