2016-12-13 24 views
13

私はTemporaryFolderルールを使用しているJUnit4テストを書いています。 @Ruleと@ClassRuleの両方でうまくいくようです。 Junit @Ruleと@ClassRuleの違いは何ですか?どうして私は別のものを使うべきですか?Junit @Ruleと@ClassRule

答えて

23

クラスに複数のテストメソッドがある場合、その区別が明確になります。

@ClassRuleは、いずれの試験方法よりも前に実行されるbefore()メソッドがあります。すべてのテストメソッドが実行され、最後にルールのafter()メソッドが実行されます。したがって、クラス内に5つのテストメソッドがある場合、before()after()はそれぞれ1回だけ実行されます。

@ClassRuleは静的メソッドに適用されるため、それに内在するすべての制限があります。

@Ruleは、ターゲットメソッドが実行される前後の処理を実行できるルールのapply()メソッドでテストを実行します。 5つのテストメソッドがある場合、各メソッドのラッパーとして、ルールのapply()が5回呼び出されます。

静的メソッドですべてのテストメソッドで再利用できるものを設定するには、@ClassRuleを使用してください。

を使用して、テストメソッドごとに新たに作成する必要があるか、リセットする必要があります。

1

@Ruleを@BeforeClassの前に実行するように設定することはできません。

@ClassRuleは静的メソッドでなければなりません。

関連する問題