testXX 実行のたびにTestクラスがインスタンス化される


JUnitについて、勘違いしていたことがわかった。


(誤) テストクラスからはひとつのインスタンスしか作られない。このひとつのインスタンスの #setUpや #testXX が実行される。


(正) #testXX実行のたびに、新しいインスタンスが生成される。

参考リンク:
http://www.alles.or.jp/~torutk/oojava/maneuver/2000/6-3.html

TestRunnerは、各テストメソッド(testXXX)をそれぞれ別のインスタンスで実行する。
こうすることで↓のようなメリットがえられる。

  • どの順で実行してもテスト結果が変わらない
  • testXX間での依存関係を排除できる(← たとえば、testAで、ある変数fooが初期化されていることがtestB実行時の前提条件というのは、結果が一定しないまずいデザイン)
  • testAが変数fooに何をいれようと、何をいれなかろうと、他のtestXXには影響がでない