ほげにっき

hogedigoの日記

拡張ClassLoaderを用いたユニットテスト

static fieldとかstatic initializerを多用しているとJUnitのテスト時に躓く。一度しか初期化されない値をテストメソッド毎に切り替えたりとか・・。単体テストの為にsetter作るのもなんだか本末転倒だし、リフレクション使うのもなんだかテストの意義が崩れる気がする。


そこで・・テストメソッド毎に拡張ClassLoaderでロードし直して実行!!テスト対象クラスと依存するクラスを纏めてロードしなおすことで、static initializerも実行され直すし、static fieldも別空間に確保される。


さらに・・propertiesファイルなどクラスパスから読み込むリソースも、テスト毎に切り替えられるオマケ付き。


・・・てなカンジのユーティリティを作って、実際期待通りの動作もしていたのだけれど・・最近ツール*1カバレッジ取ったら上手く集計されなかった・・・orz

そりゃそうだ。ClassLoaderが変わったら別クラスだもんね。。ガックシ。

*1:EclEmma及びdjUnit使用