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
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top