TemporaryFolderルールを使用するJUnit4テストを書いています。 @Ruleと@ClassRuleの両方で正常に動作するようです。 Junit @Ruleと@ClassRuleの違いは何ですか?なぜ別のものを使用しないのですか?
クラスに複数のテストメソッドがある場合、区別が明確になります。
_@ClassRule
_のbefore()
メソッドは、テストメソッドの前に実行されます。次に、すべてのテストメソッドが実行され、最後にルールのafter()
メソッドが実行されます。したがって、クラスに5つのテストメソッドがある場合、before()
とafter()
はそれぞれ1回だけ実行されます。
_@ClassRule
_は静的メソッドに適用されるため、それに固有のすべての制限があります。
_@Rule
_により、ルールのapply()
メソッドを介してテストが実行されます。このメソッドは、ターゲットメソッドの実行前後に実行できます。 5つのテストメソッドがある場合、各メソッドのラッパーとして、ルールのapply()
が5回呼び出されます。
_@ClassRule
_を使用して、静的メソッドで実現できる場合は、すべてのテストメソッドで再利用できるものを設定します。
_@Rule
_を使用して、テストメソッドごとに新規作成またはリセットが必要なものを設定します。
@Ruleは、@ BeforeClassの前に実行するように設定できません。
@ClassRuleは静的メソッドである必要がありますが。
参照:ルールまたはそれらを返すメソッドを参照する静的フィールドに注釈を付けます。フィールドは、パブリック、静的、およびTestRuleのサブタイプである必要があります。メソッドはpublic staticであり、TestRuleのサブタイプを返す必要があります。
TestRuleに渡されたステートメントは、BeforeClassメソッドを実行し、次にテストクラスの本体全体(標準JUnitテストクラスの場合はすべての含まれるメソッド、スイートの場合は含まれるすべてのクラス)、最後にAfterClassを実行します。メソッド。
https://junit.org/junit4/javadoc/4.12/org/junit/ClassRule.html