前のブログ PHP等でMVCにわけて、アジャイルっぽく開発できるようにするためのコーディング方略と例 で、カオル姫-テンさん方式(分散)、つまり、
・コントローラーをいれて
・画面部分と処理部分をわけ
・画面部分は、セッションの中身を表示するだけ
・処理部分は、画面表示内容をセッションに設定して、コントローラー呼び出し
の方法を示しました。
で、今回は、その方法で、画面だけ、あるいは処理部分のPHPプログラムだけをテストする、ユニットテストの方法をしめします。
■■ 方略
どうやって、ユニットテストをやるかということについて、画面(VIEW)と処理部分(モデル)とにわけて説明します。
●画面の場合
ドライバ側で、セッションに、表示する値を設定して、
headerで、画面のPHPを呼び出します。
→セッションに設定した値が表示されるはずです。
●処理部分の場合
ドライバ側で、セッションに、処理に必要な値を設定して、
セッションのdebug_modeに"YES"を設定して、
headerで、その処理PHPを呼び出します。
→かならず、コントローラーにもどることになります。
で、コントローラーでは、debug_modeがYESの場合は、nextURLの値にかかわらず
debug.phpを呼び出しますので
debug.phpで、セッションの中身を表示すれば、OKです。
ということで、ドライバとdebug.phpを作成し、ドライバから、値をセッションに設定、debug_modeをYESにして、画面なり、処理するPHPを呼び出せば、デバッグできそうです。
■■具体例
では、今回は、処理プログラムshori.phpをテストしてみます。
処理のテストの場合は、ドライバとdebug.phpを用意すればOKです。
●ドライバ側
以下のようなドライバ側のPHPを作成します。
<? //==============================================// // // // テストドライバ // // // //==============================================// // セッション開始 session_start(); // 値設定 $_SESSION['username'] = "課長"; $_SESSION['nextURL'] = "shori.php"; // デバッグモードで $_SESSION['debug_mode'] = "YES"; // 機能呼び出し header("Location:shori.php¥n¥n"); ?> |
(上記の < > ¥ は実際には半角です)
セッションをスタートし、データをセット、デバッグモードをYESにして、処理プログラムを呼び出します(コントローラーではありません。処理プログラムshori.phpを呼び出してくださいね)
● デバッグ表示用(debug.php)
以下のようなデバッグ表示用のPHPを作成します。
<? ////////////////////////////////////////////////////////// // ここで使う関数 // ////////////////////////////////////////////////////////// //==============================================================// // 関数:print_dispdata // // 内容:表示します // // 引数 $data 表示するもの // // $mae 表示時、行の前の文字(スペース) // //==============================================================// function print_dispdata($data,$mae) { foreach($data as $key => $val) { if ( is_array($val) == true) { print $key . "は、配列<BR>"; print_dispdata($val,$mae . " "); } else { print $mae . $key . ":" . $val . "<BR>"; } } } ?> <? ////////////////////////////////////////////////////////// // プログラム開始 // ////////////////////////////////////////////////////////// session_start(); ?> <html> <head><title>テスト結果</title><head> <body> <h3>テスト結果</H3> <? print_dispdata($_SESSION,""); ?> </body> </HTML> |
(上記の < > ¥ は実際には半角です)
表になっているところは、配列なので、配列の場合は、キーと中身を再帰的に表示するようにしています。
あとは、前のブログ で作成したファイル(コントローラーctl.phpとshori.phpが必要)を用意しておきます。
そして、ドライバ用として作成したファイルを開いてください(http://127.0.0.1/ドライバ用ファイル.php のように、httpプロトコルのURLを入れて呼び出してね。C:¥program files¥なんとかかんとかみたいなかんじのファイル形式で呼び出さないでね!!ファイルをIEにドロップしても、ファイル形式になってしまうので、プログラムが見えるだけだよ!!)。
こんなかんじで、処理結果が見えます
|
で、実際には、ユニットテストだけでなく、ある程度処理をまとめて、結合してテストしたいわけです。その場合、画面表示までやるのであれば、デバッグモードをYESにしないで、テストすればいいし、いくつかの処理をさせたあとで、表示させたければ、コントローラー(ctl.php)の
if ( $_SESSION['debug_mode'] == "YES")
のところを、
if ( $_SESSION['nextURL'] == とめたいURL)
のようなかんじで、nextURLに、とめたいURLの値がセットされていたら、debug.phpを表示するように書き換えればOKです。そこまでの処理結果がdebug.phpで表示されます。
ということで、テスト方法についても書いたので、
つぎは、コントローラーで集中管理する方法(カオル姫-テンさん方式(集中))です。
(覚えていて、気が向いたら)