junit 4.11 には@FixMethodOrder
-annotation が付属しています。これにより、Junit テストを順序付けるために MethodSorter 実装を選択できるようになります。と の 3 つのデフォルトのソーターがJVM
ありNAME_ASCENDING
ますDEFAULT
。
ここで、独自の MethodSorter を作成したいと思います。誰かがそれを行う方法への指針を教えてくれますか?
JUnit は依存テストを推奨しないため、これは簡単ではなく、お勧めできません。
詳細については、SortMethodsWith に関する詳細な説明を参照してください。ユーザーは、テスト クラス内のメソッドの実行順序を選択できます。
JUnit は、他のテストに依存するテストを作成することを奨励していません。@FixMethodOrderは、予測可能性のためのソート テスト メソッドに関する議論の後に導入されました。
基本的な問題は、Java 7 がリフレクションを使用してメソッドを検索するときに、それらを一貫した順序で返さないことでした。Java 6 では、ソース ファイルに表示される順序で返されることがほぼ保証されていました。これはもはや当てはまりません。
一部のテスト クラスには依存するテストがあります (設計によるものか偶発的なものかに関係なく)。予測可能性のためにテスト メソッドを並べ替えると、少なくともこれらのテストが一貫した順序で実行されることが保証されます。ただし、この順序付けはメソッドの hashCode に基づいているため、順序付けは決定論的ですが、予測するのは困難です。したがって、テストの順序付けに問題がある場合、順序付けを修正する方法は簡単ではなく、明白でもありません。hashCode が高い/低いテスト メソッド名を見つける必要があります。
@FixMethodOrder
は、ユーザーが名前を変更するだけで注文の問題を簡単に解決できるようにするために導入されました。しかし、少なくとも私にとっては、壊れたテストが修正されるまで、一時的な修正と見なされます。
また、通常はsurefireからテストの実行順序を指定でき、ant にも同様のオプションがあることに注意してください。
詳細については、まさにこのテーマに関するブログ投稿を公開しました。