web-dev-qa-db-ja.com

java.lang.IncompatibleClassChangeError:ScalaCheckとScalaTestを使用したクラスの実装

ScalaCheckとScalaTestを使用してテストを作成しようとすると、厄介な例外が発生します。これが私の依存関係です:

libraryDependencies ++= Seq(
  "org.scalatest" %% "scalatest" % "2.2.6" % "test",
  "org.scalacheck" %% "scalacheck" % "1.13.0" % "test"
) 

これが私のテストです:

import org.scalatest.PropSpec
import org.scalatest.prop.Checkers

class MyPropSpec extends PropSpec with Checkers {

  property("List.concat") {
    check((a: List[Int], b: List[Int]) => a.size + b.size == (a ::: b).size)
  }
}

これを実行しようとすると、次のようになります。

DeferredAbortedSuite:
 Exception encountered when attempting to run a suite with class name:      org.scalatest.DeferredAbortedSuite *** ABORTED ***
     Java.lang.IncompatibleClassChangeError: Implementing class
     at Java.lang.ClassLoader.defineClass1(Native Method)
     at Java.lang.ClassLoader.defineClass(ClassLoader.Java:760)
     at Java.security.SecureClassLoader.defineClass(SecureClassLoader.Java:142)
     at Java.net.URLClassLoader.defineClass(URLClassLoader.Java:467)
     at Java.net.URLClassLoader.access$100(URLClassLoader.Java:73)
     at Java.net.URLClassLoader$1.run(URLClassLoader.Java:368)
     at Java.net.URLClassLoader$1.run(URLClassLoader.Java:362)
     at Java.security.AccessController.doPrivileged(Native Method)
     at Java.net.URLClassLoader.findClass(URLClassLoader.Java:361)
     at Java.lang.ClassLoader.loadClass(ClassLoader.Java:424)
     ...
     Java.lang.IncompatibleClassChangeError: Implementing class
     at Java.lang.ClassLoader.defineClass1(Native Method)
     at Java.lang.ClassLoader.defineClass(ClassLoader.Java:760)
     at Java.security.SecureClassLoader.defineClass(SecureClassLoader.Java:142)
     at Java.net.URLClassLoader.defineClass(URLClassLoader.Java:467)
     at Java.net.URLClassLoader.access$100(URLClassLoader.Java:73)
     at Java.net.URLClassLoader$1.run(URLClassLoader.Java:368)
     at Java.net.URLClassLoader$1.run(URLClassLoader.Java:362)
     at Java.security.AccessController.doPrivileged(Native Method)
     at Java.net.URLClassLoader.findClass(URLClassLoader.Java:361)
     at Java.lang.ClassLoader.loadClass(ClassLoader.Java:424)
     at Java.lang.ClassLoader.loadClass(ClassLoader.Java:357)
     ...

ここで何が欠けていますか?

22

ScalaTest2.2.6はScalaCheck1.13.0と互換性がありません。 「scalacheck」%「1.12.5」にダウングレードすると役立ちます。

これは https://github.com/rickynils/scalacheck/issues/217 として報告されました。この問題は、次の解決策で解決されます。

ScalaTestの現在のすべてのリリース(2.2.6、3.0.0など)は、ScalaCheck 1.12.1に対して構築されています( https://github.com/scalatest/scalatest/blob/master/project/scalatest.scala#を参照) L134 )。したがって、ScalaCheck1.12.xを1.13.yに単純に交換できるという保証はありません。 ScalaCheckは、同じマイナーバージョンシリーズ(1.12.1、1.12.2、1.12.3など)内でのみバイナリ互換性を維持します。

48
Suma