2013-06-15 11 views
8

Sto tentando di eseguire test per un'applicazione Scala basata su sbt in intellij. Ma ottengo il seguente errore che io non sono sicuro di come risolvere il problema:Intellij non eseguirà ScalaTest - "Errore di modifica classe incompatibile"

Testing started at 21:07 ... 
java.lang.IncompatibleClassChangeError: Found class scala.collection.mutable.ArrayOps, but interface was expected 
    at org.scalatest.tools.Runner$.checkArgsForValidity(Runner.scala:895) 
    at org.scalatest.tools.Runner$.runOptionallyWithPassFailReporter(Runner.scala:729) 
    at org.scalatest.tools.Runner$.run(Runner.scala:711) 
    at org.scalatest.tools.Runner.run(Runner.scala) 
    at org.jetbrains.plugins.scala.testingSupport.scalaTest.ScalaTestRunner.runScalaTest2(ScalaTestRunner.java:144) 
    at org.jetbrains.plugins.scala.testingSupport.scalaTest.ScalaTestRunner.main(ScalaTestRunner.java:35) 
    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:601) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) 

Quando decorare la mia classe con l'attributo Junit corridore funzionano bene (e in realtà è una corsa molto meglio in termini di grafica) :

@RunWith(classOf[JUnitRunner]) 
+0

Hai provato "sbt clean && sbt gen-idea', eliminando la cache di edy, riavviando Intellij ecc? – samthebest

+0

Quando si esegue 'sbt test' funziona? – Daenyth

risposta

0

Questo sembra essere un problema con scala test runner framework. Mi ero imbattuto nello stesso problema; alla fine, come hai suggerito, finisci per usare junit test runner per farlo funzionare. Ma il problema nel mio caso era che si trattava di una dipendenza transitiva e di un tale errore di classe.

1

Verificare che le librerie utilizzate per JUnitRunner siano uguali. La maggior parte delle volte "Errore di modifica della classe incompatibile" si verifica a causa della compatibilità con le versioni precedenti. E date anche un'occhiata al barattolo delle librerie scala al momento della compilazione e dell'esecuzione.

1

Ho ricevuto lo stesso errore durante il tentativo di eseguire test per la mia app Play Framework. Eseguendo il drill down nella traccia dello stack, ho scoperto che la classe del problema era FakeRequest, che si trova nella libreria del test dei giochi. Avevo due diverse versioni della libreria, una per Play 2.4 e una per 2.3. Sono stato in grado di risolvere questo problema rimuovendo la versione del test di gioco per Play 2.3 (apri le Impostazioni del modulo -> Librerie -> trova ed elimina la cattiva dipendenza).

Il problema è probabilmente con qualche altra dipendenza problematica, ma seguire gli stessi passaggi di cui sopra può aiutare a risolverlo.

Problemi correlati