Specs2 测试无法在 IntelliJ 中原生 运行
Specs2 Tests Fail to Run Natively in IntelliJ
运行 IntelliJ 中的 Specs2 失败。 运行 通过 SBT 任务手动进行的相同测试工作正常,没有任何问题。
- 留言:"Test framework quit unexpectedly"
- IntelliJ:v.15.0.5 或 2016.2 EAP(内部版本#IC-162.426.1)
- 平台:Scala 2.11.7,SBT 0.13.8,Specs2 2.4.17,玩吧! 2.3.10
这是一个常见的错误响应,但对于很多其他人来说,根本原因似乎有所不同。我之前解决过这个问题并通过将以下内容添加到 build.sbt
:
来更正它
fork in Test := false
parallelExecution in Test := false
现在测试又失败了。我查看了我们 build.sbt
文件的修订历史,但我没有注意到任何会引发这种回归的重要内容,而且我没有任何线索。
在对崩溃进行逐步调试后,我发现了以下根本原因:
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at org.specs2.reflect.Classes$class.createInstanceFor(Classes.scala:154)
at org.specs2.reflect.Classes$.createInstanceFor(Classes.scala:207)
at org.specs2.reflect.Classes$$anonfun$createInstanceOfEither.apply(Classes.scala:145)
at org.specs2.reflect.Classes$$anonfun$createInstanceOfEither.apply(Classes.scala:145)
at scala.Option.map(Option.scala:146)
at org.specs2.reflect.Classes$class.createInstanceOfEither(Classes.scala:145)
at org.specs2.reflect.Classes$.createInstanceOfEither(Classes.scala:207)
at org.specs2.reflect.Classes$class.org$specs2$reflect$Classes$$createInstanceForConstructor(Classes.scala:118)
at org.specs2.reflect.Classes$$anonfun.apply(Classes.scala:98)
at org.specs2.reflect.Classes$$anonfun.apply(Classes.scala:98)
at scala.collection.immutable.List.map(List.scala:273)
at org.specs2.reflect.Classes$class.tryToCreateObjectEither(Classes.scala:98)
at org.specs2.reflect.Classes$.tryToCreateObjectEither(Classes.scala:207)
at org.specs2.reflect.Classes$class.tryToCreateObject(Classes.scala:70)
at org.specs2.reflect.Classes$.tryToCreateObject(Classes.scala:207)
at org.specs2.specification.SpecificationStructure$.createSpecificationFromClassOrObject(BaseSpecification.scala:126)
at org.specs2.specification.SpecificationStructure$.createSpecificationOption(BaseSpecification.scala:107)
at org.specs2.specification.SpecificationStructure$.createSpecification(BaseSpecification.scala:95)
at org.specs2.runner.ClassRunner.createSpecification(ClassRunner.scala:60)
at org.specs2.runner.ClassRunner.start(ClassRunner.scala:31)
at org.specs2.runner.NotifierRunner.start(NotifierRunner.scala:25)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.jetbrains.plugins.scala.testingSupport.specs2.JavaSpecs2Runner.runSpecs2_old(JavaSpecs2Runner.java:133)
at org.jetbrains.plugins.scala.testingSupport.specs2.JavaSpecs2Runner.runSingleTest(JavaSpecs2Runner.java:204)
at org.jetbrains.plugins.scala.testingSupport.specs2.JavaSpecs2Runner.main(JavaSpecs2Runner.java:85)
Caused by: java.lang.IncompatibleClassChangeError: Found class scalaz.Tree, but interface was expected
at org.specs2.mutable.SideEffectingCreationPaths$class.$init$(FragmentsBuilder.scala:245)
at org.specs2.mutable.Specification.<init>(Specification.scala:12)
at controllers.VerificationApiSpec.<init>(VerificationApiSpec.scala:26)
... 32 more
scalaz.Tree
是我项目中许多其他依赖项的传递依赖项,这些依赖项请求的版本包括 7.1.1
、7.1.2
、7.1.3
、7.0.6
scalaz
。有趣的是,在7.0.x
中,scalaz.Tree
是一个trait(在Java白话中是接口),但在7.1.x
中是一个抽象的class,所以这可能构成了根原因。
考虑到传递依赖与 scalaz 7.1.x
和 7.0.x
明显不兼容的冲突,是否可以解决此问题?
Specs2 2.4.17
使用 Scalaz 7.1.0
。您构建中的其他一些依赖项可能会拖拽 Scalaz 7.2.x
依赖项。我建议您将 specs2
版本更新为 3.8.4
,这将带来更新版本的 Scalaz。
运行 IntelliJ 中的 Specs2 失败。 运行 通过 SBT 任务手动进行的相同测试工作正常,没有任何问题。
- 留言:"Test framework quit unexpectedly"
- IntelliJ:v.15.0.5 或 2016.2 EAP(内部版本#IC-162.426.1)
- 平台:Scala 2.11.7,SBT 0.13.8,Specs2 2.4.17,玩吧! 2.3.10
这是一个常见的错误响应,但对于很多其他人来说,根本原因似乎有所不同。我之前解决过这个问题并通过将以下内容添加到 build.sbt
:
fork in Test := false
parallelExecution in Test := false
现在测试又失败了。我查看了我们 build.sbt
文件的修订历史,但我没有注意到任何会引发这种回归的重要内容,而且我没有任何线索。
在对崩溃进行逐步调试后,我发现了以下根本原因:
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at org.specs2.reflect.Classes$class.createInstanceFor(Classes.scala:154)
at org.specs2.reflect.Classes$.createInstanceFor(Classes.scala:207)
at org.specs2.reflect.Classes$$anonfun$createInstanceOfEither.apply(Classes.scala:145)
at org.specs2.reflect.Classes$$anonfun$createInstanceOfEither.apply(Classes.scala:145)
at scala.Option.map(Option.scala:146)
at org.specs2.reflect.Classes$class.createInstanceOfEither(Classes.scala:145)
at org.specs2.reflect.Classes$.createInstanceOfEither(Classes.scala:207)
at org.specs2.reflect.Classes$class.org$specs2$reflect$Classes$$createInstanceForConstructor(Classes.scala:118)
at org.specs2.reflect.Classes$$anonfun.apply(Classes.scala:98)
at org.specs2.reflect.Classes$$anonfun.apply(Classes.scala:98)
at scala.collection.immutable.List.map(List.scala:273)
at org.specs2.reflect.Classes$class.tryToCreateObjectEither(Classes.scala:98)
at org.specs2.reflect.Classes$.tryToCreateObjectEither(Classes.scala:207)
at org.specs2.reflect.Classes$class.tryToCreateObject(Classes.scala:70)
at org.specs2.reflect.Classes$.tryToCreateObject(Classes.scala:207)
at org.specs2.specification.SpecificationStructure$.createSpecificationFromClassOrObject(BaseSpecification.scala:126)
at org.specs2.specification.SpecificationStructure$.createSpecificationOption(BaseSpecification.scala:107)
at org.specs2.specification.SpecificationStructure$.createSpecification(BaseSpecification.scala:95)
at org.specs2.runner.ClassRunner.createSpecification(ClassRunner.scala:60)
at org.specs2.runner.ClassRunner.start(ClassRunner.scala:31)
at org.specs2.runner.NotifierRunner.start(NotifierRunner.scala:25)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.jetbrains.plugins.scala.testingSupport.specs2.JavaSpecs2Runner.runSpecs2_old(JavaSpecs2Runner.java:133)
at org.jetbrains.plugins.scala.testingSupport.specs2.JavaSpecs2Runner.runSingleTest(JavaSpecs2Runner.java:204)
at org.jetbrains.plugins.scala.testingSupport.specs2.JavaSpecs2Runner.main(JavaSpecs2Runner.java:85)
Caused by: java.lang.IncompatibleClassChangeError: Found class scalaz.Tree, but interface was expected
at org.specs2.mutable.SideEffectingCreationPaths$class.$init$(FragmentsBuilder.scala:245)
at org.specs2.mutable.Specification.<init>(Specification.scala:12)
at controllers.VerificationApiSpec.<init>(VerificationApiSpec.scala:26)
... 32 more
scalaz.Tree
是我项目中许多其他依赖项的传递依赖项,这些依赖项请求的版本包括 7.1.1
、7.1.2
、7.1.3
、7.0.6
scalaz
。有趣的是,在7.0.x
中,scalaz.Tree
是一个trait(在Java白话中是接口),但在7.1.x
中是一个抽象的class,所以这可能构成了根原因。
考虑到传递依赖与 scalaz 7.1.x
和 7.0.x
明显不兼容的冲突,是否可以解决此问题?
Specs2 2.4.17
使用 Scalaz 7.1.0
。您构建中的其他一些依赖项可能会拖拽 Scalaz 7.2.x
依赖项。我建议您将 specs2
版本更新为 3.8.4
,这将带来更新版本的 Scalaz。