2009-06-27 4 views
13

스칼라를 사용하여 JUnit 4 테스트에 예상되는 예외를 설정하려고합니다. 나는 다음과 유사한 일을 현재 오전 :스칼라와 JUnit을 사용하여 예상 예외를 설정하는 방법 4

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

을하지만 다음과 같은 컴파일러 오류 : 속성

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

질문의 구문이 Scala 2.10.3에서 제대로 작동합니다. – SigmaX

답변

8

방법의 스칼라 거래하는 것은 약간 펑키이다. 난 당신이 다음과 같이 표현한다 뭘 하려는지 생각 :

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

Yowzer ... 스칼라가 자바보다 표현력이 적은 경우? – skaffman

+0

예, 주석은 내가 언어를 좋아하지 않는 영역 일 것입니다. 이 것이 "가치가 있다면 ..."암시 적 규칙이지만, 진짜 팬이 아닙니다. 아 ~. –

+4

이것은 나를 위해 작동하지 않습니다. 내 설치 : scala 2.9.2, junit 4.10. 다음과 같은 오류 메시지 : "예상되는 정의 시작" – andreas

15

앞으로 조금 나아 보이 겠지만 2.8의 특수 효과 구문이 원래 게시 한 것과 동일하게 변경되었습니다. Tristan이 게시 한 구문은 현재 안정 버전에서 올바르지 만 야간 2.8 컴파일러로 프로젝트를 업그레이드 할 때 오류가 발생했습니다. 나는 이것이 named and default arguments의 포함 때문인 것으로 짐작하고 있습니다. Scala 메일 링리스트에는 some discussion도 있습니다. 루카스 Rytz을 인용 :

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

에릭 : 당신은 또한에 specs을 시도 할 수 있습니다

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

그건 슬픔의 세계에서 나를 구해 냈습니다. Thx –

+1

내 경우 import junit.framework.Test import org.junit.Test (자바에서 차이가없는 것 같습니다)에서 import 문을 변경하기 전까지는 작동하지 않았습니다. –

+0

+1 이제 올바른 답이되었습니다. 최신 스칼라 버전 2.10. –

0

.

0

사용 ScalaTest 및 JUnit을 함께 당신은 할 수 있습니다 : 어떤 Tristan suggested

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

유사하지만,이 구문 :

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

이 나를 위해 (JUnit을 4.10, 스칼라 2.10.2) 작동 실제로 컴파일하고 내 프로젝트에서 작동합니다.

편집 : 어, 자세히 살펴보면 원래의 질문과 정확히 일치합니다. 글쎄, 나는 답변에 최신 작동 구문을 갖는 것이 아프지 않다고 생각한다.

관련 문제