Как установить ожидаемое исключение, используя Scala и JUnit 4 - PullRequest
15 голосов
/ 27 июня 2009

Я хочу установить ожидаемое исключение для теста JUnit 4 с использованием Scala. В настоящее время я делаю что-то похожее на следующее:

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

Но я получаю следующую ошибку компилятора:

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

Ответы [ 5 ]

16 голосов
/ 15 июля 2009

Это немного вперед, но синтаксис для аннотаций в 2.8 изменился и стал таким же, как вы первоначально разместили. Синтаксис, опубликованный Tristan, верен в текущей стабильной версии, но он дал мне ошибки, когда я обновил свой проект до ночной версии 2.8. Я предполагаю, что это связано с включением именованных и аргументов по умолчанию . Также есть некоторое обсуждение в списке рассылки Scala. Цитируя Лукаса Ритца:

Также обратите внимание, что в 2.8.0 синтаксис для аннотаций Java больше не будет использовать имя-значение пары, но именованные аргументы вместо этого, то есть

@ann{ val x = 1, val y = 2}  ==>  @ann(x = 1, y = 2)
10 голосов
/ 27 июня 2009

То, как scala работает с атрибутами, немного забавно. Я думаю, что вы пытаетесь сделать, должно быть выражено так:

@Test { val expected = classOf[ NullPointerException] }
def someTest {
    // test code
}
1 голос
/ 07 октября 2015

Это работает для меня (JUnit 4.10, Scala 2.10.2):

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

Аналогично тому, что Тристан предложил , но этот синтаксис фактически компилируется и работает в моем проекте.

Редактировать: Ну, если присмотреться, это именно то, что было в первоначальном вопросе. Ну, я думаю, что наличие последнего рабочего синтаксиса также в ответах не повредит.

1 голос
/ 21 января 2014

Используйте 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]
  }
}
1 голос
/ 15 июля 2009

Вы также можете попробовать спецификации с:

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

Эрик.

...