テストでのDI

旧TECHMemoでも書いたけれどテストでのDIはかなり使える。単体テストだけでなく、結合テストでも使っている。

同じテストシナリオでDIするものを差し替えるのがかなり便利。

けれど、まだ完全には上手くいっていない。例えば、InContainer or OnMemoryを切り替えるとかをする場合に、ServletTestCaseをExtendするかTestCaseをExtendするかも変えなきゃいけない。これだと、単純にDIするものを変えればよいわけではない。今は委譲でInContainerもOnMemoryでもDIするものだけ切り替えればできるようにしているけれど、あまりスマートな方法ではない。

この問題は、アスペクトを差し替えるっていう手が使えるんだろうけど、切り替えるものがより明示的に表現されないとわかりにくくなって他の人がテストできないから、なかなか導入できない。
http://www-6.ibm.com/jp/developerworks/java/020719/j_j-aspectj2.html

やってみた幹事では、テストでDIするものを変えるときには、切り替えなければいけないセット(そうのようなセット)を、より明示的に切り替えられる仕組みが必要な気がしている。

まだ課題はあるけれど、効果はかなりあるから、もうちょっと使っていこうと思う。