2013-01-15 6 views
26

JUnitのテストケースでは、@Ruleによって注釈が付けられたフィールドは公開されている必要があります。これは一般的なJavaコーディング規約を破棄します(すべてのクラスメンバー変数は公開しないでください)。なぜJUnitはこれを必要としますか? @RuleためJUnitの@Rule注釈付きフィールドが公開される必要があるのはなぜですか?

ドキュメント:https://github.com/junit-team/junit/blob/master/src/main/java/org/junit/Rule.java

答えて

27

JUnitのランナーがルールを実行するために、反射的フィールドにアクセスする必要があります。フィールドがプライベートの場合、アクセスはIllegalAccessExceptionをスローします。

もう1つの選択肢は、ランナーがルールを実行する前にプライベートからパブリックにアクセスを変更させることでした。ただし、セキュリティマネージャが有効になっている場合に問題が発生する可能性があります。

パブリックフィールドがテストクラスに含まれないようにするには、Rule@Ruleまたは@ClassRuleと返すメソッドに注釈を付けることができます。

+8

+1 @Ruleでメソッドに注釈を付けることもできます。これにより、問題を回避できます。これをあなたの答えに加えるべきです。 –

+0

Matthewに感謝、私はそれを知らなかった。明らかに4.11の新機能。 –

+0

@KErlandsson - それについてあなたは完全に確かですか?これは、JUnit APIのドキュメントでは、「フィールドは静的ではなくパブリックで、TestRule(推奨)またはMethodRuleのサブタイプでなければなりません」 – dziki

関連する問題