2009-06-27 18 views
13

Chcę ustawić oczekiwany wyjątek dla testu JUnit 4 przy użyciu Scala. Jestem obecny robi coś podobnego do następującego:Jak ustawić oczekiwany wyjątek przy użyciu Scali i JUnit 4

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

Ale pojawia się następujący błąd kompilatora:

error: wrong number of arguments for constructor Test:()org.junit.Test 
+2

Składnia w pytaniu działa dobrze dla mnie w Scali 2.10.3. – SigmaX

Odpowiedz

8

drodze oferty Scala z atrybutami jest trochę odjazdowe. Myślę, że to, co próbujesz zrobić, należy wyrazić tak:

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

Yowzer ... przypadek, w którym scala jest * mniej * ekspresywny niż java? – skaffman

+0

Tak, adnotacje to prawdopodobnie jedna z tych dziedzin, której nie lubię. Istnieje ta "domyślna zasada" jeśli się ją nazywa wartością ... ", ale nie jest prawdziwym fanem. Ach tak. –

+4

to nie działa dla mnie. moja konfiguracja: scala 2.9.2, junit 4.10. następujący komunikat o błędzie: "oczekiwany początek definicji" – andreas

15

Wygląda to nieco, ale składnia adnotacji w wersji 2.8 została zmieniona tak, aby była taka sama jak pierwotnie opublikowana. Składnia napisana przez Tristana jest poprawna w obecnej wersji stabilnej, ale dała mi błędy, gdy uaktualniłem mój projekt do kompilatora z opcją 2.8. Zgaduję, że jest to spowodowane włączeniem named and default arguments. Istnieje również some discussion na liście mailingowej Scala. Cytowanie Lukas Rytz:

Also note that in 2.8.0 the syntax for java annotations will no longer use the name-value pairs but named arguments instead, i.e.

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

To właśnie uratowało mnie od świata smutku. Thx –

+1

W moim przypadku nie działało, dopóki nie zmieniłem importu z importu junit.framework.Test import org.junit.Test (co nie robi żadnej różnicy w java) –

+0

+1 To jest teraz poprawna odpowiedź dla najnowszą wersję Scala 2.10. –

0

Możesz także spróbować specs z:

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

Eric.

0

Zastosowanie ScalaTest i JUnit razem i można zrobić:

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

Działa to dla mnie (JUnit 4.10, Scala 2.10.2):

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

podobny do tego Tristan suggested, ale składnia faktycznie kompiluje i działa w moim projekcie.

Edycja: Uh, patrząc bliżej, to jest dokładnie to, co pierwotne pytanie miało. Cóż, domyślam się, że posiadanie najnowszej działającej składni także w odpowiedziach nie boli.

Powiązane problemy