1

Scala で JUnit テストを行う Java のプロジェクトがあります。各テスト クラスには、次の注釈が付けられ@Testます。

import org.junit.Test

@Test
class SomeTest {
  ...
}

JUnit APIは、それ@Testがメソッド アノテーションであると言います。@Testただし、メソッド アノテーションをそのままにしてクラスからアノテーションを削除すると、 Eclipse から実行すると多くのテストが実行されません。

では、クラスに適用されるアノテーションの目的は何@Testですか?また、これらのアノテーションが削除されたときに一部のテストが実行されないのはなぜですか?

4

3 に答える 3

4

Scalaは(Scala IDEの外部でも)アノテーションをチェックしないElementTypeため、Scalaのクラスの@Testアノテーションの「目的」はありません。

実際、クラスには任意のアノテーションを適用できますが、Scalaはこれを防ぎません。次の例を使用します。

import org.junit.Test
import org.junit.Rule

@Rule
class Foo {
    @Test
    def test(filename: String) = println("test");
}

コンパイル後、クラスに@Ruleアノテーションを取得します。これは既知の機能です。AFAIKを使用すると、ソースのフィールドにアノテーションを「適用」できますが、ターゲットのアノテーションを使用すると、実際にはメソッドに適用されます。

標準のテストランナーのいずれかを使用してテストを実行している場合@Test、クラスのonは何の違いもありません。@Test重要なのは、メソッドのアノテーションだけです。

ScalaでJUnitを使用する場合は、Javaの場合と同じルールに従う必要があります。

于 2011-12-26T14:42:50.150 に答える
2

JUnitアノテーションは、クラス アノテーションではなく@Test、メソッド アノテーションです (ソースはこちらを参照) 。したがって、クラスに追加する必要がないだけでなく、許可することさえできません。@Test

それは奇妙です:

  • Eclipse では、Scala クラスに追加することもできます。
  • これにより、テストの動作が変更されます。

Eclipse のバグ、または Eclipse Scala プラグインのバグのようです。

「Eclipseから実行する場合」、多くのテストが実行されていないとおっしゃっています。これは、Eclipse の外部ですべてのテストを正常に実行できるということですか?

于 2011-12-26T10:47:06.320 に答える
1

参考までに、TestNG では@Test、クラス レベルで指定できます。これにより、このクラスのすべてのパブリック メソッドがテストに変わります。しかし、私の知る限り、JUnit はこれをサポートしていません。

于 2011-12-26T15:34:02.130 に答える