JNDI を使用したユニットテストの方法

DBUnit のように DB 操作を行うユニットテストを実施する際、そこで使うコネクションをどう取ろうかという話。

バッチ処理のような単体プログラムであれば、単純に JDBC のコネクションを自前で生成すれば良いんだろうけど、Webアプリケーションのなかで、DB操作を行うメソッドを間接的に利用するクラスをテストしようとすると、ちと面倒なことになる。わざわざテスト用コネクションを受けるインタフェースと実装を用意しなくちゃなんない。うざー。

そこで考えてみる。

実際のアプリケーションは、tomcat などのコンテナの JNDI を使ってコネクションを張るわけで。じゃあ、ユニットテストケースからも tomcat が見えて、JNDI を使えれば良いんじゃないか、と。そんなことできるのか、と。ツールとか無いのか、と。あったよ、と。

JUnit JNDI DataSource helper package

こいつを使うことで、コンテナ上で動くのと同様に、DB操作するクラスのユニットテストができます。素晴らしい。結構、感動した。

以下、簡単な使い方のまとめ。

ダウンロードしたパッケージに含まれる jndi_unit_test_helper.properties をコピーして、使いたい JNDI の設定を記述する。このプロパティファイルは、クラスパスの通っているところならOK。ここでは、WEB-INF/src/ に配置。

com.javaranch.unittest.helper.sql.pool.JNDIName=java:comp/env/jdbc/deftrash
com.javaranch.unittest.helper.sql.pool.dbDriver=org.postgresql.Driver
com.javaranch.unittest.helper.sql.pool.dbServer=jdbc:postgresql://192.168.0.10:5432/deftrash
com.javaranch.unittest.helper.sql.pool.dbLogin=postgres
com.javaranch.unittest.helper.sql.pool.dbPassword=password

あとは、テストケースに記述して使うだけ。

/*
 *  (非 Javadoc)
 * @see junit.framework.TestCase#setUp()
 */
protected void setUp() throws Exception {

super.setUp();
// JNDI準備 JNDIUnitTestHelper.init("WEB-INF/src/jndi_unit_test_helper.properties"); }

WebLogic とかならできるみたいだけど、うちは tomcat 野郎なんで、これは助かるなあ。JNDI を各所で使っているアプリには、是非。なかなか使えますよ。

つーことで、お疲れさまでした。

このエントリーのトラックバックURL
http://www.deftrash.com/admin/mt4/mt-tb.cgi/346