Come impostare un'eccezione prevista utilizzando Scala e JUnit 4
-
20-08-2019 - |
Domanda
Voglio impostare un'eccezione prevista per un test JUnit 4 usando Scala. Attualmente sto facendo qualcosa di simile al seguente:
@Test(expected=classOf[NullPointerException])
def someTest() = {
// Some test code
}
Ma ricevo il seguente errore del compilatore:
error: wrong number of arguments for constructor Test: ()org.junit.Test
Soluzione
Il modo in cui Scala gestisce gli attributi è un po 'funky. Penso che ciò che stai cercando di fare dovrebbe essere espresso in questo modo:
@Test { val expected = classOf[ NullPointerException] }
def someTest {
// test code
}
Altri suggerimenti
Questo non vede l'ora, ma la sintassi per le annotazioni in 2.8 è cambiata per essere la stessa di quella che hai pubblicato in origine. La sintassi pubblicata da Tristan è corretta nell'attuale versione stabile, ma mi ha dato errori quando ho aggiornato il mio progetto a un compilatore 2.8 notturno. Immagino che ciò sia dovuto all'inclusione di argomenti predefiniti e predefiniti . C'è anche alcune discussioni sul Mailing list Scala. Citando Lukas Rytz:
Si noti inoltre che in 2.8.0 la sintassi per le annotazioni Java non utilizzerà più il nome-valore coppie ma argomenti denominati, ad esempio
@ann{ val x = 1, val y = 2} ==> @ann(x = 1, y = 2)
Puoi anche provare specifiche con:
class mySpec extends SpecificationWithJUnit {
"this expects an exception" in {
myCode must throwA[NullPointerException]
}
}
Eric.
Usa ScalaTest e JUnit insieme e puoi fare:
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]
}
}
Questo funziona per me (JUnit 4.10, Scala 2.10.2):
@Test(expected = classOf[NullPointerException])
def testFoo() {
foo(null)
}
Simile a ciò che suggerito da Tristan , ma questa sintassi in realtà compila e funziona nel mio progetto.
Modifica: Uh, guardando più da vicino, questo è esattamente quello che aveva la domanda originale. Bene, immagino che avere l'ultima sintassi funzionante anche nelle risposte non faccia male.