[PHP-users 18114]Re: HTTP?テスティングフレームワーク

shima tetuo mlmlml @ lily.freemail.ne.jp
2003年 9月 27日 (土) 15:38:06 JST


tetuoです。

問題提議の仕方があまり良くなかったようで(加えて件名も)、自分の考えてい
た所と違う方向へ話が行っているようです。すみません。
HTTPで通信をし、結果が予測と合っているかと言うより、$_GET、$_POSTを使用
するクラスをUnitテスト出来ないかと考えていました。

----------
問題:
----------
あるクラスにおいてUnitテストをしたいが、$_GET、$_POST等のフォームパラメー
タ変数を必要とする場合、良いパラメータの受け渡し方法が思いつかず、Unitテ
ストではなくテストページ(.php)を使用して検証してしまう。
この為、Pear、sourceforge等のPHPUnitのようなUnitテストで$_GET、$_POSTを
設定出来るような物を探しておりました。

----------
自分でやってみた事:
----------
Pear PHPUnit 0.6.2 stable 2003-06-21 において

PHPUnit/TestCase.php に

setGetParams($params)
setPostParams($params)
//$paramsはVector等で設定したい物を纏める

この2つのメソッドを追加して、下のテストメソッドのように使用する。
//VectorとParamクラスは自作です。ParamはImmutableでGetのアクセッサのみで
す。(getName, getValue)

function testSomeTest(){

    $this->assertEquals(0, count($_GET), '値がない事を確認');
    $this->assertEquals(false, isset($_SERVER['REQUEST_METHOD']), '設定されていない事を確認');

    $gets = new Vector();
    $gets->add(new Param('someParam', 'someValue'));
    $this->setGetParams($gets);

    /*
    本来はここから先に目的のクラスのテストコードを書く。
    */
    $this->assertEquals('GET', $_SERVER['REQUEST_METHOD'], '設定された事を確認');
    $this->assertEquals(1, count($_GET), '1つ追加された事を確認');
    $this->assertEquals(true, isset($_GET[$param->getName()]), '指定GETパラメータがある事を確認');
    $this->assertEquals('someValue', $_GET[$param->getName()], '指定GETパラメータのあたいが合っている事を確認');
}

このままだと、$_GETに設定した変数が次のメソッド以降も保持されるので

_clearParams()

をPHPUnit/TestCase.phpに追加し、このメソッドの中で設定したパラメータをク
リアするようにする。又、このメソッド自体はPHPUnit/TestCase.phpのrunBare
メソッドに追加する事で1テスト毎において自動的にクリアされるようにする。

function runBare() {
    $this->setUp();
    $this->runTest();
    
    $this->_clearParams();
    
    $this->tearDown();
    $this->pass();
}


このようにすればフォームパラメータが必要となるテストにおいてもそれ程煩雑
にならず$_GET、$_POSTの値の設定が行えると思いますが、皆さんはどう考えま
すか?邪道ですかね?



PHP-users メーリングリストの案内