2015-06-20 3 views
5

C'è tutto il codice nel mio progetto:Perché il mio test più scalabile non verrà compilato? (Scala.MatchError)

package fileSearcher 

import org.scalatest.FlatSpec 

class FilterCheckerTests extends org.scalatest.FlatSpec { 
    "Foo" should 
    "not do terrible things" in { 

    assert(1 == 1) 
    } 
} 

Eclipse

crash test di SBT con scala.MatchError (tutti i dettagli qui sotto).

Cosa sto sbagliando?

[info] Compiling 1 Scala source to C:\scala\course\FileSearcher\target\scala-2.1 
0\test-classes... 
[error] 
[error]  while compiling: C:\scala\course\FileSearcher\src\test\scala\fileSe 
archer\FilterCheckerTests.scala 
[error]   during phase: typer 
[error]  library version: version 2.10.4 
[error]  compiler version: version 2.10.4 
[error] reconstructed args: -classpath C:\scala\course\FileSearcher\target\sca 
la-2.10\test-classes;C:\scala\course\FileSearcher\target\scala-2.10\classes;C:\U 
sers\Max\.ivy2\cache\org.scalatest\scalatest_2.11\bundles\scalatest_2.11-2.2.4.j 
ar;C:\Users\Max\.ivy2\cache\org.scala-lang\scala-reflect\jars\scala-reflect-2.11 
.2.jar;C:\Users\Max\.ivy2\cache\org.scala-lang.modules\scala-xml_2.11\bundles\sc 
ala-xml_2.11-1.0.2.jar;C:\Users\Max\.ivy2\cache\com.novocode\junit-interface\jar 
s\junit-interface-0.11.jar;C:\Users\Max\.ivy2\cache\junit\junit\jars\junit-4.11. 
jar;C:\Users\Max\.ivy2\cache\org.hamcrest\hamcrest-core\jars\hamcrest-core-1.3.j 
ar;C:\Users\Max\.ivy2\cache\org.scala-sbt\test-interface\jars\test-interface-1.0 
.jar -bootclasspath C:\Program Files\Java\jdk1.8.0_20\jre\lib\resources.jar;C:\P 
rogram Files\Java\jdk1.8.0_20\jre\lib\rt.jar;C:\Program Files\Java\jdk1.8.0_20\j 
re\lib\sunrsasign.jar;C:\Program Files\Java\jdk1.8.0_20\jre\lib\jsse.jar;C:\Prog 
ram Files\Java\jdk1.8.0_20\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_20\jre 
\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_20\jre\lib\jfr.jar;C:\Program F 
iles\Java\jdk1.8.0_20\jre\classes;C:\Users\Max\.ivy2\cache\org.scala-lang\scala- 
library\jars\scala-library-2.10.4.jar 
[error] 
[error] last tree to typer: Literal(Constant(true)) 
[error]    symbol: null 
[error] symbol definition: null 
[error]     tpe: Boolean(true) 
[error]  symbol owners: 
[error]  context owners: value <local FilterCheckerTests> -> class FilterCh 
eckerTests -> package fileSearcher 
[error] 
[error] == Enclosing template or block == 
[error] 
[error] Template(// val <local FilterCheckerTests>: <notype> in class FilterChe 
ckerTests 
[error] "org.scalatest.FlatSpec" // parents 
[error] ValDef(
[error]  private 
[error]  "_" 
[error]  <tpt> 
[error]  <empty> 
[error] ) 
[error] // 2 statements 
[error] DefDef(// def <init>(): fileSearcher.FilterCheckerTests in class Filt 
erCheckerTests 
[error]  <method> 
[error]  "<init>" 
[error]  [] 
[error]  List(Nil) 
[error]  <tpt> // tree.tpe=fileSearcher.FilterCheckerTests 
[error]  Block(// tree.tpe=Unit 
[error]  Apply(// def <init>(): org.scalatest.FlatSpec in class FlatSpec, 
tree.tpe=org.scalatest.FlatSpec 
[error]   FilterCheckerTests.super."<init>" // def <init>(): org.scalatest 
.FlatSpec in class FlatSpec, tree.tpe=()org.scalatest.FlatSpec 
[error]   Nil 
[error]  ) 
[error]  () 
[error] ) 
[error] ) 
[error] Apply(
[error]  "Foo".should("not do terrible things")."in" 
[error]  Apply(
[error]  "assert" 
[error]  Apply(// def ==(x: Int): Boolean in class Int, tree.tpe=Boolean(t 
rue) 
[error]   1."$eq$eq" // def ==(x: Int): Boolean in class Int, tree.tpe=(x: 
Int)Boolean 
[error]   1 
[error]  ) 
[error] ) 
[error] ) 
[error]) 
[error] 
[error] == Expanded type of tree == 
[error] 
[error] ConstantType(value = Constant(true)) 
[error] 
[error] uncaught exception during compilation: scala.MatchError 
[trace] Stack trace suppressed: run last test:compile for the full output. 
[error] (test:compile) scala.MatchError: false (of class scala.reflect.internal. 
Trees$Literal) 
[error] Total time: 0 s, completed Jun 20, 2015 11:07:15 AM 
1. Waiting for source changes... (press enter to interrupt) 
+0

Errore del compilatore. Questo non dovrebbe accadere, ma non potrebbe funzionare comunque perché si mischia Scala 2.10 con le librerie per 2.11. – sschaef

+0

@sschaef hai qualche suggerimento? –

+1

Puoi mostrarti delle dipendenze sbt? – marios

risposta

10

Come si può vedere guardando il classpath, che è stampato dal compilatore, è mescolato Scala 2.10 con le librerie per 2.11. Dato che le versioni principali di Scala sono binari incompatibili, questo non può mai funzionare.

Questo può essere risolto con scalaVersion := "2.11.5" o impostando tutte le dipendenze per utilizzare le 2.10 versioni, che si possono fare con libraryDependencies += "group" %% "libName" % "version", dove %% mezzi SBT automaticamente utilizza la versione della libreria corretta.

2

Per chiunque ottenere un errore simile (come ho fatto io) in esecuzione Scala 2.10 usando Maven invece di SBT, la soluzione sarebbe semplicemente di cambiare la dipendenza Maven suggerito nel sito ScalaTest da

<dependency> 
    <groupId>org.scalatest</groupId> 
    <artifactId>scalatest_2.11</artifactId> 
    <version>3.0.0</version> 
    <scope>test</scope> 
</dependency> 

a

<dependency> 
    <groupId>org.scalatest</groupId> 
    <artifactId>scalatest_2.10</artifactId> 
    <version>3.0.0</version> 
    <scope>test</scope> 
</dependency>