簡體   English   中英

Scala 2.11-> 2.12 —單元測試在sbt中失敗,在IntelliJ中有效

[英]Scala 2.11 -> 2.12 — Unit test fails in sbt, works in IntelliJ

我有一個正在Scala 2.11下工作的項目,並且我正在升級它以使用Scala 2.12。 我有一個單元測試,當我通過sbt在命令行上運行它時,它失敗了,但是當我通過IntelliJ IDEA運行它時,它運行良好。

我得到的錯誤是:

java.lang.NoSuchMethodError: scala.Product.$init$(Lscala/Product;)V

該測試是Java中的JUnit測試,它調用用Scala編寫的代碼。

單元測試中的違規行:

String paramsJson = adapter.sendReadyMessage();

sendReadyMessage方法(也是Java)嘗試創建ReadyMessage

ReadyMessage rm = new ReadyMessage(timestamp);

ReadyMessage只是一個Scala案例類

case class ReadyMessage(Timestamp: String) extends ToJson

ToJson是一個提升JSON助手特性,它封裝了JSON生成:

import net.liftweb.json.{DefaultFormats, Serialization}

trait ToJson {
  private implicit val formats = DefaultFormats
  def toJson = Serialization.write(this)
}

該錯誤似乎發生在case class ReadyMessage行上。 ToJson塊用於上下文。

就像我說的那樣,當我從IntelliJ中運行它時,它就可以工作。 我在sbt下運行時失敗。 當它是sbt中所有測試的一部分時,它將失敗,而當我在sbt中單獨運行它時,它將失敗。

除了粘貼整個build.sbt文件之外,我不確定在此添加其他有用的信息。 似乎是某種形式的版本沖突,但我仔細檢查並更新了所有可以找到的軟件版本號。

我意識到這個問題所涉及的問題可能比通過SO合理調試可能更為復雜。 但是,即使“確保已在build.sbt中更新了XX”響應也很有幫助。

答案竟然像問題本身一樣令人討厭。

在搜索了我的構建很多小時之后,我意識到子項目中存在一個失敗的“ lib”目錄。 我打開了它,果然包含舊版本的Scala和其他一些庫。 我刪除了這些文件,並確保libraryDependencies處理了它們,現在一切構建和測試都很好。

感謝大家讓我參加“這是Scala版本不匹配”培訓。 孩子們,讓這成為一個警示性的故事。 將托管和非托管依賴項混合使用,后果自負。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM