おそらく他のバージョンでも同様と思いますが、最新のバージョン4.12について書きます。
...
APIドキュメント(参考リンク参照)には、こう書かれています。
The @Before methods of superclasses will be run before those of the current class, unless they are overridden in the current class. No other ordering is defined.
(拙訳)スーパークラスの@Before
メソッドは、スーパークラスのメソッドがそれ自体のクラスによってオーバーライドされていない限りは、それ自体のクラスのものよりも先に実行されます。
それ以外の順序は未定義です。(訳注:同じクラス内のメンバーの順序は保証されない、という意味だと思います。)
...
ソースコードも見てみましたが、このような実装になっていました。
バージョン4.12のソースコード(下記参考リンク先の行あたりを参照)を見てみたところによると、
まず継承関係のクラスリストを子→親の順で取得した後で、メンバーをリストに集める処理があります。
そこで、@Before
,@BeforeClass
のアノテーションがついているメンバーは、前述のクラスリストとは逆順になるように登録されていきます。@After
,@AfterClass
の場合は、クラスリストの順番のままメンバーを集めていますね。
結果として、スーパークラス→サブクラスの順で@Before
がついているメンバーが整列されることになります。
...
参考リンク:
junit/TestClass.java at r4.12 · junit-team/junit - GitHub
https://github.com/junit-team/junit/blob/r4.12/src/main/java/org/junit/runners/model/TestClass.java#L82
Before - JUnit API ドキュメント
http://junit.org/javadoc/latest/org/junit/Before.html
junit/Before.java at r4.12 · junit-team/junit - GitHub
https://github.com/junit-team/junit/blob/r4.12/src/main/java/org/junit/Before.java#L12
※Javadocが「最新版(latest)」しか無いため、将来異なるバージョンへのリンクになっている可能性がありますので、ソースコードの当該ドキュメント部分のリンクも貼っておきます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/12/26 03:31