17

我想为使用 Scala 的 JUnit 4 测试设置一个预期的异常。我目前正在做类似以下的事情:

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

但我收到以下编译器错误:

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

5 回答 5

17

这有点期待,但是 2.8 中注释的语法已经更改为与您最初发布的相同。Tristan 发布的语法在当前稳定版本中是正确的,但是当我将项目升级到 nightly 2.8 编译器时它给了我错误。我猜这是由于包含了命名参数和默认参数。Scala 邮件列表上也有一些讨论。引用 Lukas Rytz 的话:

另请注意,在 2.8.0 中,java 注释的语法将不再使用名称-值对,而是使用命名参数,即

@ann{ val x = 1, val y = 2}  ==>  @ann(x = 1, y = 2)
于 2009-07-14T20:31:55.070 回答
10

scala 处理属性的方式有点古怪。我认为你想要做的应该是这样表达的:

@Test { val expected = classOf[ NullPointerException] }
def someTest {
    // test code
}
于 2009-06-27T19:52:24.077 回答
4

这对我有用(JUnit 4.10,Scala 2.10.2):

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

类似于Tristan 建议的,但这种语法实际上可以在我的项目中编译和工作。

编辑:呃,仔细看,这正是最初的问题。好吧,我想在答案中也有最新的工作语法并没有什么坏处。

于 2015-10-07T13:10:18.053 回答
1

您还可以尝试使用以下规格

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

埃里克。

于 2009-07-14T23:00:18.343 回答
1

一起使用 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]
  }
}
于 2014-01-21T14:10:52.800 回答