ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

PHPで、MVCにわけ、処理、画面別々に、ユニットテストを行う例と、方法

2005-11-23 20:03:40 | PHP

 前のブログ 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にドロップしても、ファイル形式になってしまうので、プログラムが見えるだけだよ!!)。

こんなかんじで、処理結果が見えます

テスト結果

username:課長 nextURL:OK.php debug_mode:YES dengonは、配列 1は、配列   simei:社長   naiyo:健康に注意して馬車馬のように働け 2は、配列   simei:部長   naiyo:オレの給料を上げるため、お前らは死ぬほど働け 3は、配列   simei:係長   naiyo:あのー、できないことを要求されても、できません





 で、実際には、ユニットテストだけでなく、ある程度処理をまとめて、結合してテストしたいわけです。その場合、画面表示までやるのであれば、デバッグモードをYESにしないで、テストすればいいし、いくつかの処理をさせたあとで、表示させたければ、コントローラー(ctl.php)の

if ( $_SESSION['debug_mode'] == "YES")

のところを、

if ( $_SESSION['nextURL'] == とめたいURL)

 のようなかんじで、nextURLに、とめたいURLの値がセットされていたら、debug.phpを表示するように書き換えればOKです。そこまでの処理結果がdebug.phpで表示されます。




 ということで、テスト方法についても書いたので、
 つぎは、コントローラーで集中管理する方法(カオル姫-テンさん方式(集中))です。
(覚えていて、気が向いたら)


この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« PHP等でMVCにわけて、... | トップ | 中国って10万のケータイあ... »
最新の画像もっと見る

PHP」カテゴリの最新記事