JUnit JNDI DataSource helper package

JNDIからDataSourceを取得するようなコードがあっても試験できるようにしてくれる、
JUnit JNDI DataSource helper packageというツールがある。


とあるSpring+Strutsのアプリの単体試験で、

  • StrutsTestCaseを使うとstruts-config.xmlが読み込まれる。
  • plug-inにSpringの設定を記述しているので、Springが初期化される。
  • Springの設定ファイルでJNDIからデータソースを取得するようになっている。
  • サーバを起動しているわけがないので、JNDIの部分でエラーになる。
  • でも、テスト用に設定ファイルを変えるのめんどくせぇ(ホントは大人の事情)。

ということから、試しに使ってみた。
使い方は簡単なので省略。


で、使ってみたところこんなエラーが出る。


java.lang.UnsupportedOperationException: Method close() not yet implemented.
at com.javaranch.unittest.helper.sql.pool.SimpleContext.close(SimpleContext.java:568)
at javax.naming.InitialContext.close(InitialContext.java:490)
at org.springframework.jndi.JndiTemplate.execute(JndiTemplate.java:89)
・・・


原因は簡単で、SpringがJNDIからDataSourceを取得する際にInitialContextを
きちんとcloseしてくれていて、JUnit JNDI DataSource helper packageの
SimpleContext#closeではUnsupportedOperationExceptionをスローしているから。


というわけで、すげー便利だと思ってたのに使えない・・・。
作りはかなり簡単なので、ソースを真似して自分で作ればいいんだけど、めんどいなぁ。


あ、JNDIUnitTestHelperあたりのソースを見てて
InitialContext関連の仕組みって初めて知った。