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

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

PHPUnitのPEAR版でユニットテスト(その2:sourceforge、JUnitと比較)

2005-12-09 16:34:55 | PHP

 前に書いた
PHPUnitのPEAR版でユニットテストをしてみる(その1)
のつづきです。

 今度は、以前、Junitの本に書いてあったソースを、sourceforge版のPHPUnit用に書き換えて実験してみましたが(ここ
 そのソースをPear版のPHPUnitに書き換えると同時に、コメントいただいた内容を参考に、GUIを使ってみたいと思います。




■■ 前回までのお話
●PEAR版をダウンロードしてきました
ここ http://pear.php.net/package/PHPUnit

●そこの、PHPUnit.phpのソースの中にあるサンプルを切り出して、動かしてみました。


■■ まず、テスト用のソースを用意する

テスト用のソースを用意します。以前のsourceforge版用のPHPUnitのPEAR版でユニットテストをしてみる(その1)のソースを基本的に使います。
(このソースは、そこに書かれている、Junitの本のものをPHP用に直したものです)

まず、ソースは、テスト対象(SimpleCount.php)になるものと、テストを実行する用(SimpleCountTest.php)の、2種類が必要です。

テスト対象のソースは、(当然ながら)前にsourceforge版で示したものと同じです
(sourceforge版かPEAR版かは、あくまでも、テストをする人の好みの話で、元のソースは、テストツールによって書き換えないといけないようでは、困るから、当然、同じものが使えないと困る)。
<?php
class SimpleCount {
	var	$CARROT_CODE = "1234";
	var	$CARROT_NAME = "carrot";	//	27ページと違うけど、29ページに、こう修正とある
    /**
     *  商品コードをいれると、文字列を返す
     *
     */
    function getShohinName($name) {
		if ( $name == $this->CARROT_CODE )
		{
			return $this->CARROT_NAME;
		}
		return NULL;
    }
}
?>

(上記の < > ¥は、実際には、半角)
これを、SimpleCount.phpとして、保存します。


 で、肝心のテストするプログラム、SimpleCountTest.phpは、こんなかんじ
<?php
require_once("SimpleCount.php");	//	先に、テスト対象を宣言する
require_once("PHPUnit.php");
require_once("PHPUnit/GUI/HTML.php");

class SimpleCountTest extends  PHPUnit_TestCase  {

    /**
     *  コンストラクタ
     */
    function SimpleCountTest($name) {
        $this->PHPUnit_TestCase($name);
    }

    /**
     *  初期処理
     */
     function setUp() {
     }

    //--------- ここから、テストをかくのだ
    /**
     *  getShohinNameのテスト
     */
     function testGetShohinName() {

		//	本に書いてあるのを、PHPにしただけ
	$simple = new SimpleCount();
	$data = "1234";
        $this->assertEquals("carrot",$simple->getShohinName($data));

     }
}

//------------------------------------------------------//
//	ここが、以前とちがうところ			//

$suite = new PHPUnit_TestSuite("SimpleCountTest");
$result = new PHPUnit_GUI_HTML($suite);
$result->show();

?>

(上記の < > ¥は、実際には、半角)
赤のところが、PEAR用に書き換えたところ
青のところが、PEAR用でかつ、GUI用に書き換えたところです。

で、これを、SimpleCountTest.phpという名前で保存して、自分のホームのところにおきます。




■■ 実際にブラウザで動かしてみる
自分のホームページのURLは、日本全国(いや、世界的に)http://127.0.0.1/なので
http://127.0.0.1/SimpleCountTest.php をブラウザで見てみると、
こんなかんじに出てきます。

そこで、SimpleCountTest NOT EXECUTEDの前のチェックボックスをクリックして、チェックを入れてから、run testsボタンをクリックすると、こんな感じになって、

テストOKの画面になります。

ちなみに、(手順が逆ですが)、SimpleCountTest.phpの
$this->assertEquals("carrot",$simple->getShohinName($data));
の"carrot"を、"にんじん"に変えてわざと間違えると、

といった感じになります。




これで、PHPUnitのお話は、おしまい(のはず)


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Excelなんかの試験(テスト)仕様書とJunit等のユニットテストの関係(その2)

2005-12-09 14:02:50 | 開発ネタ

前のブログで書いた
Excelなんかの試験(テスト)仕様書とJunit等のユニットテストの関係(その1)
の続きです




■■ 前のブログの内容
「そもそも、試験仕様書に書く項目を考える」では、仕様書に書く内容について書いて、とくに
・テスト内容
 ここが、2つないし、3つにわかれる場合もある
  3つの場合は、テストの内容、テストを行う(前提)条件、予想される結果
ということを書きました

「Junitなんかのユニットテストの考え方について、考えてみる」では、Junitなんかが、契約による設計(DbC)にもとづいていて、設計内容(=テスト内容)は、事前条件、事後条件、不変条件にわけられるという話をかきました。
 それらのことの詳細は、こちらをどうぞ http://www.javaroad.jp/java_exception4.htm

「仕様書(内容3部構成)と、契約による設計の関係」では、その事前条件、事後条件、不変条件と、テスト内容について
 事後条件が、「予想される結果」
 不変条件(事前に満たすこと)を、「テストを行う(前提)条件」に、
 不変条件(事後に満たしてること)を、、「予想される結果」に、
 事前条件を「テストの内容」(テスト項目)に
書くとまとまるという話をかきました。

 今回は、その具体的な書き方の内容や、仕様書の内容が3つに分かれていない場合の書き方などについてです。




■■ 具体的には、3つにどうやって分けて書くのか?
3つに分けて書くときは、

●テストを行う前提条件で、
・そのテスト対象の入力となる引数以外のことを書いておく
・引数を、あらかじめ、処理しないといけない場合は、そのことを書いておく

たとえば、「DBのコネクションを確立しておく」とかについてです。

 エビデンスは、ここで、値になっているものに対しては、ログに書き出す
 (ある変数が、100になっていることなんていうのは書く。
  でも、接続してることなんていうのは、ログに書きようがないので、書かなくても、まいっか)
 なお、DBの値を変化させる場合は、ここで、変化前の値をログに書き出す

●テスト内容(項目)で
 対象となるユニットの引数など、直接相手に渡す値について、書く
 このとき、クラスの変数として渡す場合、なやむんだよねー。
 だけど、その値が違うことによって、結果が左右されるんなら、それも、事前条件としていいんじゃないか。

 エビデンスは、ここで、値になっているものに対しては、ログに書き出す

● 予想される結果
 返り値や、変化している値(クラス変数などあれば)を書き出す
 JUNITだと、これは、assertをいれているはずである

 エビデンスは、ここで、「予想される結果」については、基本的に、かならず、ログに書き出す
 ログに書き出せない場合、調査方法は、目視となり、エビデンスが存在しない(あるいはハードコピー)になる。
   
 なお、DBの値を変化させた場合は、ここで、変化後の値をログに書き出す




■■ 3つのものを、まとめて、2つまたは1つにする

で、テスト内容が3つでない場合は、こういうふうにすると、まとまる。

●予想される結果が、テスト内容と一緒の項目になっている
 (テスト内容)のときに(予想される結果)となっていること
という文章にする。

【 例 】
テスト内容 引数 コード=1234
予想される結果 carrotとかえる
という場合

 コード=1234のときに、carrotとかえること。

●前提条件とテスト内容が一緒の項目になっている
 (前提条件)の場合において、(テスト内容)
 として、テスト内容に書くとOK

【 例 】
前提条件  商品マスタはOpen済み
テスト内容 引数 コード=1234
という場合

商品マスタはOpen済みの場合において、コード=1234のとき

●全部まとめて、テスト内容
 (前提条件)の場合において、(テスト内容)のときに(予想される結果)となっていること
という文章になる。

【例】をまとめると
商品マスタはOpen済みの場合において、コード=1234のときcarrotとかえること。




 で、実際に、試験仕様書に、このような文がかかれたとき、さっきの操作によって、事前条件、事後条件、不変条件についてわけて、それらの条件をJunitでやるユニットテストに反映させていくことになる。

 つまり、テストのところでは、
・ユニットを呼ぶ前に、事前条件をセットしておき、
・不変条件、事前条件のassert を(してもしなくてもしなくてもいいけど、良い方法としては)して
・テスト対象を呼び出し
・結果を、事後条件としてassertする。

っていうことになる。




っていった、試験仕様書のテスト方法マニュアルを、あんまりもらったことないんだけど。。
(別にJunitでなくても、ドライバでも、ログの入れ方でも、同じ注意ということになる)
これ、決まってないと、試験仕様書と、テスト内容の対応というか、正当性が確認できないと思うんだけど。。どーなのどーなの。。

 あ、もちろん、こうやって書くと、気がつくと思うけど、このユニットテスト<単体テストっていうことになりますよね。
 単体テストでは、契約による設計で言う
事前条件
事後条件
不変条件
にあてはまらない、副作用のテストをすることと、テストの優先順位決定上、中間生成物をログによってチェックすることが必要になるので。。

 (つーか、このユニットテストだけだと、たぶん、基準の半分くらい、もっと少ないか?にしか、テスト項目がならない気がする。。。)

 でも、それについては、話題がちがうんで、また別の機会にでも・・(覚えていたら。。)



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

SoftEtherがPacketiXになって、ぷらっとホームで、登さんの講演があるらしいよ!

2005-12-09 11:46:22 | Weblog

 いまねいまね、ぷらっとホームの人が来て、聞いた話なんだけどね。

 あの登さんのSoftEtherがPacketiXになったんだそうで
 (ここに書いてある http://www.softether.com/jp/vpn2/)

 で、ぷらっとホームが、そのPacketiX VPN 2.0を取扱商品に追加したそうな
 ここ http://www.plathome.co.jp/products/packetix/

 。。。そんなはなしは、どーでもいいんすよ!

 で、そのため、SoftEtherの登さんが、今度、(ぷらっとホームのために?)講演するんですって(@_@!)

ここ http://www.plathome.co.jp/seminar/soft_ether_vpn_051209.html

 でも、その講演は、満員御礼らしい。。。

 どうして、はやく、いってくれないのよ。。。

 と思ったら、また今度、もっとじっくりと、登さんに講演してもらう機会を作るらしい。

 これは、大注目でーす!!

 SoftEtherについては、2005年12月の日経システム構築に、
 事例研究で、

「SoftEtherでVPNを構築,特定アドレス以外の通信は遮断」

     ――オイシックス
(オイシックスっていうのは、有機農産物通販の大手)
とか出たりしてるし。。

 つーか、そうでなくても、大注目ですが、その開発者の登さんの講演っていうのは、注目ですよね。

 で、次回の、「そのじっくり」というのは、まだきまってないみたい。。
 でも、もしかすると、いまから、いっておくと、そのときに、連絡くるのかなあ。。。
 さっきの講演のところに、ぷらっとホームの(電話の)連絡先が書いてあるけど。。。

 もっとも、セミナーについては、ここに載るみたいなので、ここをずーと見てれば、いいのかもお!!




 ちなみに、その人は、ルータ機能・DHCPサーバ機能・簡易ファイアウォール機能を持った、OpenMicroServer「OMS-AL400/128」のセミナーの紹介にきたらしいが。。。

 ごめん、サーバーには、興味はないのだよ(^^;)

 

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする