top / index / prev / next / target / source
日記形式でつづる いがぴょんコラム ウェブページです。
アイデアのメモです。JUnitからPL/SQLで書かれたソースコードのテスティングは可能かどうか、についてです。 → 実開発に JUnitからのPL/SQL単体試験を実装し、かなり効果が高いことがわかりました。
JUnitやDBUnitを利用して PL/SQLコードを単体試験できないかどうか考察中です。JDBCのCallableStatement経由で呼び出して試験する、というあんばいです。setUpなどに前準備としてのテーブルデータを読み込ませて試験します。、、、これって世間一般的に ごくふつ~のアイデアなのかなぁ…。と、ぼ~っと考察中。
Oracle側の環境には何もインストールできない可能性もあるので、PL/SQLネィティブな単体試験ツールでは都合が悪いように想像しています。
2004.06.25 追記 青木淳さんに 基本的な CallableStatementの使い勝手を調べてもらいました。
次は、PL/SQLコード上で Javaとマッピング可能な引数の型の洗い出しです。ポイントは
java.sql.*以下だけに制限した範囲で、PL/SQL側の引数を規定すべきかどうか?
単体試験行程なのだからoracle.*を利用しても良い、と判断して oracle.*のJDBCの範囲で、PL/SQL側の引数を規定しても良いのかどうか?
まったくJDBC側からの呼び出しに向いていない PL/SQL側の型は存在するのかどうか? たとえば配列型とかは JDBCから呼び出せるのか?
などなど。
2004.06.26追記 青木淳さんに引き続き調べてもらいました。
Java Programming Examples (JDBCによるPL/SQL コールのサンプル) http://www.idevelopment.info/data/Programming/java/PROGRAMMING_Java_Programming.shtml
JDBC API 入門(SUNのサイト) http://java.sun.com/j2se/1.4/ja/docs/ja/guide/jdbc/getstart/GettingStartedTOC.fm.html
JUnit, JDBC, PL-SQL Procedures(JUnit, JDBC, PL/SQL での記事) http://www.bikle.com/TThier/Languages/java/JUnitDemo/
OracleのためのJava 開発技法(この本の第3章と第4章を見てみたい。。。) http://www.pearsoned.co.jp/washo/db/wa_db34-j.html
JDBC・ORACLE ストアドプロシージャコール(一応サンプルが掲載されてるのでチェック) http://kamakura.cool.ne.jp/oppama/swjd/jdbccstmt.html
SQLUnit Project Home Page(PL/SQL にも使えるUnitテストのようです。参考になりそうです) http://sqlunit.sourceforge.net/
utPLSQLプロジェクトへようこそ(PL/SQLデベロッパーのためのユニットテストツールだそうです) http://www.geocities.co.jp/SiliconValley-Oakland/8038/utplsql_sourceforge.html
Oracle9i JDBC開発者ガイドおよびリファレンス (これはダウンロードして閲覧する)
第3章にデータ型のマッピングが詳しく掲載されています。
第19章によると、JDBCを使ったPL/SQLストアドプロシージャコールでは、パラメータに Boolean型を含むプロシージャはコールできないようです。
INTEGER型の引数を持つストアドプロシージャを作成して、その中で間接的にBoolean型のパラメタを持つストアドプロシージャをコールするようにして下さいとあります。要するに、INTEGER型ストアドプロシージャを作成してラップしなさいとのことです。
2004.06.25 スガさんのツッコミSubject: [igapyon:01300] 2004/06/24 日記 : JUnit から PL/SQL コードの単体試験は可能か?スガです。 DAO クラスのメソッドを PL/SQL のラッパーと見なして、単体テストをやっています。今まさに。
RECORD 型はダメです。
私の状況では、レガシーな PL/SQL をそのまま使うという前提なので、OBJECT型に変換して呼び出すラッパーな PL/SQL を作りました。 JPublisher のドキュメントに載っている方法です。
OBJECT 型には java.sql.SQLData を実装したクラスを使っています。
TABLE 型には java.sql.ARRAY を実装したクラスを使う、はず (未確認)。
ここからいがぴょんなるほど! このネタは、通常っぽく、そして ごく自然にニーズのある話題だったのですね。安心しました。
2005.06.17追記 後日談を記載します。結局 JUnitからPL/SQLのコードの単体試験について本開発でばりばりに活用しました。今思えば、JUnitによる PL/SQL単体試験という試験方法無しではPL/SQLコードの単体試験は実施が非常に困難であったことと想像します。JUnitからの PL/SQL単体試験が可能であったので、PL/SQLの各コードに対する試験がとても実施しやすかったです。また JUnitから PL/SQLの単多試験が実施可能であることが実証できたので、PL/SQLを今後のシステム開発に導入しやすくなりました。PL/SQLで単体試験が実施できる環境を得ることができたので、PL/SQLは利用しがいのある素晴らしい言語という位置づけに私の中で変わりました。
2005.06.14追記 blancoDb EE に ストアドプロシージャ対応を加える際に必要になるので、再度このページをチェックしました。CallableStatementについては、数回ほど仕事で扱ったことはあるのですが、まだ私の体に馴染んでいないのです。
急遽 PL/SQLの入門を行うことになったので、定番のPL/SQL入門本を梅田紀伊国屋で買ってきました。
ちなみにこの本は、以前 Oracle Java Extreme 2004 (2004-04-23開催)のJava Guruに パネリストとして私と一緒に参加されてられた一志達也さまが著者さんです。内容を読んでいると、あたかも一志さんが語りかけてくるような、そんな感じがしました。文体の好みとでもいうのでしょうか、結構私の文体の好みと似ています。とても読み進めやすく感じました。
どうも、Java系のサーバサイド開発において顕著なように感じることの一つが、基本的なミドルウェアはソースコードが提供されているというのがとっても大切です。異常をソースコードを用いて解析できるからです。Eclipseを使ったら、簡単にステップイン実行が可能ですものね。ソースコードが提供されていて、しかもオープンソースという形態を取っているからこそ、はじめてJavaでWeb開発が可能になるような…そんな印象を感じる出来事に、今日、仕事で出会ってしまいました。
結城浩さんのデザインパターン本が増補改訂版として刊行されました。
デザインパターンに関わる人に強くお勧めしたい定番本が増補改訂されて刊行されたのです。私は非常に嬉しいです。また、改訂作業を行われた結城浩さんに感謝します。ご苦労を伴われたことでしょう。
某システムの変更を行ってきます。…ところで最近、連日が熱帯夜です。夜、まともに眠ることができません。ふらふらです。
「組込みソフトウェアスキル標準」とは? http://japan.cnet.com/news/ent/story/0,2000047623,20069399,00.htm スキル標準シリーズネタです。私、こういうスキル標準ネタが好きなのです。で、忙しいのでとりあえずメモ。後でひまをつくって読みたいのだが…
パフォーマンス向上の最短コースを知る http://www.atmarkit.co.jp/fdb/rensai/orasql01/orasql01_1.html ぜんぜんかんけいないのですが、アゲハさんの方が、このビルの9階にいらっしゃるように聞きました。(記事を書いた方かどうかは知りませんが)