2011-08-04 10 views
0

自分のアノテーションでJUnit4を拡張する方法に関するリソースを探してきました。私自身のアノテーションを作成してJUnit4の動作を拡張する

私は@ExpectedProblemを定義して、私のテストの一部にラベルを付けることができます。私は、TestNGをどのように拡張するかについて、ネット上にいくつかの資料があるように見えましたが、JUnit4を拡張するための細かいことはできませんでした。

ここで誰もJUnit4を拡張していますか?

ありがとう

+0

@ ExpectedProblemによって、テストが失敗すると思われる場合は、JUnit @ Rule(https://github.com/ttsui/pending)に興味があるかもしれません(免責事項:私の同僚)。 – Grundlefleck

+0

ありがとうございますが、保留中のテストやテストが失敗することはまったく関連していません。私が必要とするのは、実際に@Test(expecting = Exception)と似ていますが、ちょっと違います。 –

答えて

2

を使用して、自分のJUnitサポートをモデル化する方法であります@ExpectedProblemアノテーションを実行したい場合は、@Ruleを作成することもできます。

これはJUnit 4.7+を必要としますが、独自のRunnerを実装するよりも簡単にする必要があります。

たとえば、注釈に「このテストは例外をスローする」と言いたい場合は、@ExpectedExceptionルールを見てみましょう。あなたのニーズに十分ではない場合でも、独自のルールを実装するための出発点となります。

+0

ルールは、 "ルールよりもこのアプローチの利点は、ルールは常にクラススコープになっている"ということがわかるまで、最初は素敵なアイデアのようでした。@ http://stackoverflow.com/questions/6099633/does-testng-support-something- like-junit4s-rule/6100111#6100111メソッドスコープにする必要があります(私の注釈で1つのメソッドを持たせたい場合もありますし、別のメソッドを1つ使用したい場合もあります)。 –

+0

@devoured elysiumメソッドのルール内では、メソッド上の特定の注釈が存在するかどうかをチェックし、注釈がない場合はルールが機能しないようにすることができます。 – Grundlefleck

+0

+1 Grundlefleckのコメント @devoured elysiumそれは私が興味深い注釈の呼び出し時に 'MethodRule'のターゲットをチェックし、それに基づいてテストの実行を変更することです。 –

1

基本的なアプローチは、独自のクラスランナーを作成することです。たとえば、org.junit.runners.ParentRunnerまたはorg.junit.runners.BlockJUnit4ClassRunnerクラスを拡張することによって、次に、テストクラスに@RunWith(<your class runner>.class)と注釈を付けます。あなたのランナーでは、あなたはその後、などの注釈をチェックし、適切な行動を取るようにテストクラスを分析することができ、このグーグルが見つかりました:http://tedyoung.me/2011/01/23/junit-runtime-tests-custom-runners/

これは、春は内容に応じてorg.springframework.test.context.junit4.SpringJUnit4ClassRunner

+0

ありがとう!私はちょうどあなたに尋ねるつもりです:その不器用な@RunWith()ですべてのテストメソッドを汚染することを避ける方法はありませんか? –

+0

いいえ、AFAIKでは、ランナーをグローバルに設定する方法はありません。しかし、JUnit自身が、将来のプルーフィングを保証するために、常にすべてのテストクラスで@RunWithアノテーションを使用することを推奨していることに注意してください。テストクラスがJUnit 4テストの場合は、@RunWith(JUnit4.class)の注釈を付ける必要があります。現在のリリース(JUnit 4)では、特に指定がない限り、BlockJUnit4ClassRunnerがデフォルトになります。 – pap

関連する問題