2017-07-17 114 views
0

我有一個Kotlin彈簧啓動項目here。它有一些測試,從IntelliJ運行得很好,但是當我從命令行運行時,失敗並出現以下錯誤。Kotlin測試失敗從命令行與ClassNotFoundException但從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.spring[email protected]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運行時添加到罐子kotlinOptions.includeRuntime = true
  3. 將包級函數更改爲對象中的函數。

我發現奇怪:

  1. out目錄中除了通常的搖籃build目錄中創建。
  2. 某些類/對象被編譯爲名稱以Kt結尾的類文件。我還沒有找到任何押韻或原因,但我還是Kotlin的新手,所以我可能會錯過一些東西。

回答

0

您的測試(或實際測試的類)做了一些奇怪的事情:它們以某種方式刪除包含測試類的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這個 - 測試它,

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

檢查您的測試的問題。

+0

你說得對。我的項目克隆了一個遠程倉庫,然後構建它,並且在這個過程中它以某種方式刪除了'build'目錄的內容。 –

相關問題