「Around UT」では、ソース中のコメントから直接、単体試験項目表を作成します。
試験項目以外に記述されるコメントももちろんあるため、このツールを使用するためにはルール決めがあります。
しかし、そのルール決めは、非常にシンプルです。
PL/SQLのコメントの入力は以下の2通りがあります。
シングルラインコメント[--
]
ブロックコメント[/* */
]
「Around UT」では、ブロックコメントを元に試験項目表を作成します。 つまり、試験項目として出力したくないコメントについては、シングルラインコメントで記述すればよいということです。
コメントのコーディング規約としてまとめます。
LOOP文の前行にループ処理の内容をブロックコメントで記述します。
LOOP句の後ろにループの条件をブロックコメントで記述します。
WHILE文の前行にループ処理の内容をブロックコメントで記述します。
LOOP句の後ろにループの条件をブロックコメントで記述します。
FOR文の前行にループ処理の内容をブロックコメントで記述します。
LOOP句の後ろにループの条件をブロックコメントで記述します。
これらのコーディング規約をサンプルを交えて説明します。
【サンプル IF
文 】 処理モード(登録、更新、削除)ごとに各処理の関数を呼び出します。
/* 処理モード判定 */ IF in_process = CNS_MODE_INSERT THEN /* 処理モードが登録の場合 */ /* 登録処理関数呼び出し */ FUNC_INSERT( in_process, -- [IN ] 処理モード out_retcd, -- [OUT] 戻り値 out_errcd -- [OUT] エラーコード ); ELSIF in_process = CNS_MODE_UPDATE THEN /* 処理モードが更新の場合 */ /* 更新処理関数呼び出し */ FUNC_UPDATE( in_process, -- [IN ] 処理モード out_retcd, -- [OUT] 戻り値 out_errcd -- [OUT] エラーコード ); ELSE /* 処理モードがその他の場合 */ /* 例外処理に制御を移す */ RAISE ERR_MODE; END IF;
【サンプル CASE文 】 処理モード(登録、更新、削除)で各処理の関数を呼び出します。
/* 処理モードの条件判定 */ CASE WHEN in_process = CNS_MODE_INSERT THEN /* 登録モードの場合 */ /* 登録処理関数呼び出し */ FUNC_INSERT( in_process, -- [IN ] 処理モード out_retcd, -- [OUT] 戻り値 out_errcd -- [OUT] エラーコード ); WHEN in_process = CNS_MODE_INSERT THEN /* 更新モードの場合 */ /* 更新処理関数呼び出し */ FUNC_UPDATE( in_process, -- [IN ] 処理モード out_retcd, -- [OUT] 戻り値 out_errcd -- [OUT] エラーコード ); WHEN in_process = CNS_MODE_INSERT THEN /* 削除モードの場合 */ /* 例外処理に制御を移す */ RISE ERR_MODE; ELSE /* その他の場合 */ /* 例外処理に制御を移す */ RISE ERR_MODE; END CASE;
【サンプル LOOP文 】
/* カウンタの初期化 */ cnt := 0; /* カウンタを規定値までカウントアップ */ LOOP /* 規定値まで繰り返す。*/ /* 規定値で処理を終了する。*/ EXIT WHEN cnt >= 10; /* カウンタのインクリメント */ cnt := cnt + 1; END LOOP;
【サンプル WHILE〜LOOP文 】
/* 発注日判定 */ WHILE in_orderdate(wk_cnt) <= sysdate LOOP /* 発注日がシステム日付まで繰り返す */ /* 発注データの登録 */ INSERT INTO ORD_HED VALUES ( in_orderno(wk_cnt), -- 発注番号 in_orderitem(wk_cnt), -- 商品 in_orderval(wk_cnt) -- 発注数 ); /* カウンタのインクリメント */ wk_cnt = wk_cnt + 1; END LOOP;
【サンプル FOR〜LOOP文 】
/* 発注件数チェック */ FOR wk_cnt IN 1..in_orderno.count LOOP /* 注文件数分処理を繰り返す */ /* 発注データの登録 */ INSERT INTO ORD_HED VALUES ( in_orderno(wk_cnt), -- 発注番号 in_orderitem(wk_cnt), -- 商品 in_orderval(wk_cnt) -- 発注数 ); END LOOP;
【サンプル 例外処理 】 例外処理の記述
EXCEPTION /* 例外処理 */ WHEN ERR_NODATA THEN /* 該当無しエラーの場合 */ /* 異常情報の設定 */ out_retcd := CNS_RET_ERROR; -- 戻り値 out_errcd := CNS_ECD_NODATA; -- エラーコード WHEN ERR_MODE THEN /* 処理モードエラーの場合 */ /* 異常情報の設定 */ out_retcd := CNS_RET_ERROR; -- 戻り値 out_errcd := CNS_ECD_MODE; -- エラーコード WHEN OTHERS THEN /* Oracleエラーの場合 */ /* 異常情報の設定 */ out_retcd := CNS_RET_ERROR; -- 戻り値 out_errcd := SQLCODE; -- エラーコード