2010-12-22 6 views
20

Ich versuche, einen scala flatspec Test innerhalb von Intellij IDEA (neueste Community-Build, mit neuesten Scala-Plugin) zu laufen, aber ich bekomme immer wieder "leere Testsuite" Fehler.Wie führe ich einen scala ScalaTest in IntelliJ Idee?

Ich versuchte mit dem normalen "run" -Menü auf Rechtsklick, aber es funktioniert nicht. Ich habe auch versucht, eine neue ScalaTest-Konfiguration zu erstellen, aber der Runner nimmt die Tests nicht auf.

Ich konnte JScalaTest mit Einheit verwenden, aber ich würde wirklich lieber Flatspec-Syntax verwenden. nicht hilft entweder

Dank der Klasse mit @RunWith(classOf[JUnitRunner]) Kommentierung:

UPDATE!

UPDATE: Der Wechsel von ScalaTest zu Spec, löste das Problem. Ich bevorzuge immer noch ScalaTest mit FlatSpec, aber das ist gut genug. Code, das funktioniert:

import org.specs._ 
object SampleTestSpec extends Specification { 
    "'hello world' has 11 characters" in { 
    "hello world".size must be equalTo(113) 
    } 
    "'hello world' matches 'h.* w.*'" in { 
    "hello world" must be matching("h.* w.*") 
    } 
} 

-teo

+0

Wäre schön gewesen, wenn Sie die aktuelle Version erwähnt Zahlen. "Latest" ist ein bewegliches Ziel. – akauppi

+3

WICHTIG: Abhängig von den Umständen greift IntelliJ keine mit ScalaTest geschriebenen Testfälle auf, wie z. B. FunSpec. Stellen Sie sicher, dass Sie die "Run Configuration" -> "ScalaTest" konfigurieren, so dass die Combo "Testart" "All in package" lautet. Ich meine: Konfigurieren Sie die Standardeinstellungen auf diese Weise, andernfalls erstellt IntelliJ möglicherweise eine neue Konfiguration, so wie Sie es erwarten würden. –

+1

WICHTIG # 2: Wenn Sie SBT verwenden, verwenden Sie das Plugin sbt-idea, um Konfigurationsdateien für IntelliJ zu generieren, die benötigt werden, wenn Sie "Run Configurations" definieren. –

Antwort

4

Ich habe es so läuft (aber ich finde ein wenig ausführlich und es kann wohl abgeholzt werden):

@RunWith(classOf[JUnitSuiteRunner]) 
class AuthorisationParserRunAsTest extends JUnit4(AuthorisationParserSpec) 
object AuthorisationParserSpec extends Specification { 
    ... 
} 
+0

Also wechselte ich von ScalaTest zu Spezifikation und jetzt funktioniert es. Ich kann bestätigen, dass Sie weder die Boilerplate-Klasse noch @RunWith benötigen: import org.specs._ Objekt AuthorizationParserSpec extends Specification {wird gemacht –

0

AFAIK ist die JUnitRunner genau dafür.

+0

tnx - Ich habe das versucht, immer noch nicht gehen –

0

Nur ein wenig zu spät, aber ich habe das gleiche traf Problem ("Empty Testsuite") nach rund IDEA Bug-tracker hängen, ich habe eine Lösung für meinen Fall gefunden:
Meine scala Version war 2.9.0-1 und scala-test haben Version 2.8.*.
Es begann nach der Aktualisierung scala-test auf die neueste Version zu arbeiten (wie eine Scala).

2

ScalaTest hat an Overview über alle Möglichkeiten; Ich kommentierte nur alle Testklassen mit

@RunWith(classOf[JUnitRunner]) 
13

Wenn IntelliJ nicht die Tests automatisch abholen, können Sie wie folgt vorgehen:

Im Run-Konfiguration, eine ScalaTest Lauf-Konfiguration erstellen und setzte seine „Test kind "zu" All in package "und dessen" Test Package "zu dem Paket, das Ihre Tests enthält.

0

Ich konnte FunSuite-Tests in IntelliJ ohne irgendwelche Probleme ausführen. Was ich jedoch bei der Arbeit mit FlatSpec-Tests gefunden habe, ist, dass Sie mit der rechten Maustaste auf die tatsächliche Testklassendefinition klicken müssen, wenn Sie Strg + Shift + F10 verwenden (dh alle Tests ausführen), damit sie korrekt ausgeführt wird alle definierten Tests und vermeiden Sie frustrierende "Leere Testsuite" -Fehler.

6

Dieser arbeitete für mich: bearbeiten Konfigurationen -> Art Test: Alle im Paket

0

Im Fall hilft es jemand - ich traf diese frisch Scala und es wurde wegen der Art und Weise habe ich meinen Test strukturiert Klasse.Ich hatte

class SomeTests extends FlatSpec { 
    def aTest = { 
    "This thing when that thing happens" should 
    "return some particular response" in { 
     // ... test body 
    } 
    } 
} 

Das Problem war, dass ich meinen Test in einem Verfahren eingewickelt, nicht, dass die Tests in diesem Zusammenhang zu realisieren sein müssen blank:

class SomeTests extends FlatSpec { 

    "This thing when that thing happens" should 
    "return some particular response" in { 
     // ... test body 
    } 

}