2009-06-27 40 views
13

我想为使用Scala的JUnit 4测试设置期望的异常。我现在做类似下面的内容:如何使用Scala和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 2013-11-10 01:14:53

回答

8

的方式斯卡拉交易是有点古怪。我想你现在要做的应该是这样表示的:

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

Yowzer ... scala比java表现力差的情况? – skaffman 2009-06-27 19:55:58

+0

是的,注释可能是我不喜欢该语言的一个领域。有这个“如果它被称为价值......”隐含的规则,但是,呃,不是真正的粉丝。呃,好吧。 – 2009-06-27 20:00:09

15

这会向前看一点,但2.8中注释的语法已更改为与原始发布相同。 Tristan发布的语法在当前的稳定版本中是正确的,但是当我将项目升级到夜间2.8编译器时,它给了我错误。我猜这是由于包含named and default arguments。斯卡拉邮件列表上还有some discussion。引用卢卡斯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) 
0

您也可以尝试用specs

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

埃里克。

0

使用ScalaTest和JUnit一起,你可以这样做:

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):

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

类似于Tristan suggested,但是这句法实际上编译和工作在我的项目。

编辑:呃,仔细看,这正是原来的问题。那么,我想在答案中最新的工作语法也不会受到伤害。