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が投稿した構文は、現在の安定バージョンでは正しいですが、プロジェクトを夜間の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 に答える
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 に答える