[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 メーリングリストの案内