2016-08-09 1 views
1

Выполнение спецификаций2 в IntelliJ не выполняется. Выполнение одних и тех же тестов вручную с помощью задачи SBT работает отлично, без каких-либо проблем.Specs2 Тесты не выполняются изначально в IntelliJ

  • Сообщение: "рамки испытаний неожиданно завершить работу"
  • IntelliJ: v.15.0.5 или 2016,2 EAP (сборка # IC-162.426.1)
  • Платформа: Scala 2,11. 7, SBT 0.13.8, Specs2 2.4.17, Play! 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$1.apply(Classes.scala:145) 
    at org.specs2.reflect.Classes$$anonfun$createInstanceOfEither$1.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$4.apply(Classes.scala:98) 
    at org.specs2.reflect.Classes$$anonfun$4.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.xscalaz.Tree - это признак (интерфейс в Java-языке), но абстрактный класс в 7.1.x, поэтому это может быть основной причиной.

Возможно ли разрешить эту проблему, учитывая конфликты транзитивной зависимости от скаляса 7.1.x и 7.0.x, которые, по-видимому, несовместимы?

ответ

3

Specs2 2.4.17 использует Scalaz 7.1.0. Некоторая другая зависимость в вашей сборке, вероятно, перетаскивает зависимость Scalaz 7.2.x. Я предлагаю вам обновить версию specs2 до 3.8.4, в которой будет представлена ​​более новая версия Scalaz.

+0

Я думаю, что вы правы, я обновил свой вопрос, чтобы отразить это. Я попытаюсь перейти на 3.8.4, но запретить, чтобы можно было разрешить такой конфликт транзитивной зависимости? –

+0

Поскольку ваш проект работает отлично с sbt, я предлагаю вам удалить неправильные банки из ваших зависимостей модулей в Intellij. – Eric