Frage

Ich möchte eine erwartete Ausnahme für einen JUnit 4 Test setzen mit Scala. Ich bin Strom etwas Ähnliches wie die folgenden Aktionen ausführen:

@Test(expected=classOf[NullPointerException])
def someTest() = {
    // Some test code
}

Aber ich bekomme den folgenden Compiler-Fehler:

error: wrong number of arguments for constructor Test: ()org.junit.Test
War es hilfreich?

Lösung

Die Art und Weise scala beschäftigt sich mit Attributen ist etwas abgefahren. Ich denke, was Sie versuchen, wie dies zu tun soll ausgedrückt werden:

@Test { val expected = classOf[ NullPointerException] }
def someTest {
    // test code
}

Andere Tipps

Dies ist auf der Suche nach vorn ein wenig, aber die Syntax für Anmerkungen in 2.8 geändert hat die gleiche zu sein wie das, was Sie ursprünglich gebucht. Die Syntax Tristan ist in der aktuellen stabilen Version korrekt geschrieben, aber es gab mir Fehler, wenn ich mein Projekt zu einem nächtlichen 2.8 Compiler aktualisiert. Ich vermute, dies auf die Aufnahme des und Standardargumente . Es gibt auch einige Diskussionen auf die Scala-Mailingliste. Zitiert von Lukas Rytz:

  

Beachten Sie auch, dass die Syntax für Java-Annotationen in 2.8.0 nicht mehr den Namen-Wert verwenden   stattdessen Paare aber benannten Argumente, d.

@ann{ val x = 1, val y = 2}  ==>  @ann(x = 1, y = 2)

Sie können auch versuchen, specs mit:

class mySpec extends SpecificationWithJUnit {
  "this expects an exception" in {
     myCode must throwA[NullPointerException]
  }
}

Eric.

Mit ScalaTest und JUnit zusammen und Sie tun können:

import org.scalatest.junit.JUnitSuite
import org.scalatest.junit.ShouldMatchersForJUnit
import org.junit.Test

class ExampleSuite extends JUnitSuite with ShouldMatchersForJUnit {

  @Test def toTest() {
    evaluating { "yo".charAt(-1) } should produce [StringIndexOutOfBoundsException]
  }
}

Das funktioniert für mich (JUnit 4.10, Scala 2.10.2):

@Test(expected = classOf[NullPointerException])
def testFoo() {
    foo(null)
}

Ähnlich wie Tristan vorgeschlagen , aber diese Syntax tatsächlich kompiliert und arbeitet in meinem Projekt.

Edit: Uh, näheres Hinsehen, das ist genau das, was die ursprüngliche Frage hatte. Nun, ich denke, die jüngste Arbeits Syntax auch in den Antworten nicht weh tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top