Question

Je souhaite définir une exception attendue pour un test JUnit 4 à l'aide de Scala. Je suis en train de faire quelque chose de similaire au suivant:

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

Mais j'obtiens l'erreur de compilation suivante:

error: wrong number of arguments for constructor Test: ()org.junit.Test
Était-ce utile?

La solution

La façon dont Scala traite les attributs est un peu géniale. Je pense que ce que vous essayez de faire devrait s’exprimer ainsi:

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

Autres conseils

Nous sommes un peu impatients, mais la syntaxe des annotations dans la version 2.8 a été modifiée pour être identique à celle que vous avez initialement publiée. La syntaxe affichée par Tristan est correcte dans la version stable actuelle, mais elle m'a généré des erreurs lorsque j'ai mis à niveau mon projet vers un compilateur 2.8 tous les soirs. Je suppose que ceci est dû à l'inclusion des arguments nommés et par défaut . Il y a également des discussions sur le Liste de diffusion Scala. Citant Lukas Rytz:

  

Notez également que dans la version 2.8.0, la syntaxe des annotations java n’utilisera plus le nom-valeur   paires mais arguments nommés à la place, c.-à-d.

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

Vous pouvez également essayer specs avec:

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

Eric.

Utilisez ScalaTest et JUnit ensemble et vous pouvez faire:

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]
  }
}

Cela fonctionne pour moi (JUnit 4.10, Scala 2.10.2):

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

Semblable à ce que Tristan a suggéré , mais cette syntaxe est en réalité compilée et fonctionne dans mon projet.

Edit: Euh, en regardant de plus près, c’est exactement ce que la question initiale posait. Eh bien, je suppose qu’avoir la dernière syntaxe de travail également dans les réponses ne fait pas de mal.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top