Maven2+djUnit その2
Maven2でdjUnitを使う、という調査をしていて、その続報メモ。
まず、ここでいうdjUnitは "Virtual Mock Objectを使ったテストができること" と前提をおきます。jcoverageはこの際考えません。
で、 maven-surefire-plugin について色々と調べていくと、pom.xmlに以下のような記述をすることが出来ることがわかりました。
maven-surefire-plugin 2.4.2 -Djava.system.class.loader=jp.co.dgic.testing.common.DJUnitClassLoader -Djp.co.dgic.eclipse.virtualmock.usevirtualmock=true always true
注目すべきは surefireのconfiguration で argLine forkMode useSystemClassLoader です。
surefireは実際に、テストで用いるjavaプロセスは(広義で)forkして実行しているわけですが、このときこのJavaVMにオプションを渡すことが出来ます。
上記の例では argLineの中で java.system.class.loader を設定してやることで、クラスローダーをdjUnitのものに乗っ取っているわけです*1。
さらに、ほうっておくとsurefireの IsolatedClassLoaderとかいうクラスローダーが使われてしまうので 「ほっといてね」という意味で useSystemClassLoader をtrueに設定しています(これをしないと結局変わりませんから)
あとは、djUnitのjarとかを mvn install:install-file などして、pom.xmlに記入すればOK。会社とか複数人で使うなら身内のローカルリポジトリでも立てましょう。
…
さて、これで、テストケースの中でクラスローダーを見てみると確かに DJUnitClassLoaderにはなったのです。
ところが、いろいろオプションを足しても引いてもちゃんとコードが動かない。そもそもasmがクラスをmodifyしたときに出るべきログも出ないのです。というわけで今回はここまでとなりました。
一応針路は合っている気がしたのでここまでメモりました。