JUnit

最近、これでもかというくらいJUnitに触っている。
なのでちょっと自分メモを残しておく。
基本的なところからいくと、
・TestCaseを継承したクラスでテストケースを作る。
・TestCaseではsetUp→testの名前のつくメソッド→tearDownの順に実行される。
・TestSuiteで複数のテストケースをまとめられる。
・TestSetupを継承したクラスを使えば、テスト全体の初期処理を行える。
そしてちょっと深いところでは、
・TestSuiteを含めたTestCaseでは、まずsuiteメソッド(static)が呼び出され実行される。
suiteメソッドが無かった場合、デフォルトのTestSuiteが作られてTestCase中に存在する
testの名前のついたメソッド全てがaddTestされて呼び出される準備が行われる。
・suiteメソッドでTestSetupのサブクラスをnewしてreturnすることで、
TestSetupを実行することができる。
TestSetupもコンストラクタ・setUp・addされたTestCase・tearDownの順にメソッドが起動する。
・TestCaseクラスのインスタンスはTestCaseクラス中の実行されるテストメソッドの数だけ
作成される。


で、ちょっと思ったのが
Eclipseで開発をする場合、本体のソースとTestCaseのソースはソースフォルダーを
別にして同一パッケージで作成する。test用のパッケージと本体のパッケージを分けてしまうと
publicなメソッドのテストしかできないが、ソースフォルダーが違っていても
同一パッケージで作成すればPackagePrivateなメソッドまでのテストができる。
・assertのためのユーティリティメソッドなど、よく使う可能性のあるメソッドは
TestCaseクラスを継承した共通クラスに作成すると便利。
もちろん、その他のテストケースクラスは共通テストケースを継承して作成する。
・テストごとにインスタンスが作成されるJUnitの仕組み上、テスト全体を通して保持したい値は
staticな変数にするしかないが、staticな変数を作るよりも別途Singletonクラスのような、
リソースを保持・管理するクラスを作成したほうが便利。


などなど、まだまだあれこれいじり始めると構造的に難しい部分があって、
なかなか考えたりするのが大変だったりするわけです。
まあ、次回の開発ではこういうことを踏まえてよりよいテストを考えねばなと。
一応、今までに読んだ本としては、

初心者向け。JavaEclipseを使ったテストについて難しい言葉を使わず解説している。
JUnitイン・アクション

JUnitイン・アクション

中級者向け。JUnitのメカニズムからあらゆる自動テストの方法について解説している。
両方ともいい本だと思います。でももう少し具体例がほしいところか。
つか、自分で作るしかないのかなぁ。