Ответ 1
Способ scala имеет дело с атрибутами немного фанк. Я думаю, что вы пытаетесь сделать так:
@Test { val expected = classOf[ NullPointerException] }
def someTest {
// test code
}
Я хочу установить ожидаемое исключение для теста JUnit 4 с помощью Scala. В настоящее время я делаю что-то похожее на следующее:
@Test(expected=classOf[NullPointerException])
def someTest() = {
// Some test code
}
Но я получаю следующую ошибку компилятора:
error: wrong number of arguments for constructor Test: ()org.junit.Test
Способ scala имеет дело с атрибутами немного фанк. Я думаю, что вы пытаетесь сделать так:
@Test { val expected = classOf[ NullPointerException] }
def someTest {
// test code
}
Это немного вперед, но синтаксис аннотаций в 2.8 изменился так же, как и то, что вы первоначально разместили. Синтаксис Tristan опубликован правильно в текущей стабильной версии, но он дал мне ошибки, когда я обновил свой проект до ночного компилятора 2.8. Я предполагаю, что это связано с включением имени и аргументов по умолчанию. Существует также обсуждение в списке рассылки Scala. Цитируя Лукаса Ритца:
Также обратите внимание, что в 2.8.0 синтаксис аннотаций java больше не будет использовать имя-значение вместо аргументов вместо аргументов, т.е.
@ann{ val x = 1, val y = 2} ==> @ann(x = 1, y = 2)
Вы также можете попробовать specs с помощью:
class mySpec extends SpecificationWithJUnit {
"this expects an exception" in {
myCode must throwA[NullPointerException]
}
}
Эрик.
Используйте 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]
}
}
Это работает для меня (JUnit 4.10, Scala 2.10.2):
@Test(expected = classOf[NullPointerException])
def testFoo() {
foo(null)
}
Подобно тому, что предлагал Tristan, но этот синтаксис действительно компилируется и работает в моем проекте.
Править: О, глядя ближе, это именно то, что было в исходном вопросе. Ну, я думаю, что последний рабочий синтаксис также в ответах не повредит.