26

手続き型コードをテストする方法はありますか?私は、自動テストを作成するための優れた方法のように思われるPHPUnitを見てきました。ただし、オブジェクト指向コードを対象としているようですが、手続き型コードに代わるものはありますか?

または、Webサイトをテストする前に、Webサイトをオブジェクト指向に変換する必要がありますか?時間を無駄にする時間があまりないので、これには少し問題があるかもしれません。

ありがとう、

ダニエル。

4

1 に答える 1

36

PHPUnitを使用して手続き型コードをテストできます。単体テストは、オブジェクト指向プログラミングとは関係ありません。彼らはコードの単位をテストします。OOでは、コードの単位はメソッドです。手続き型PHPでは、スクリプト全体(ファイル)だと思います。

オブジェクト指向コードは保守とテストが簡単ですが、それは手続き型PHPをテストできないという意味ではありません。

たとえば、次のスクリプトがあります。

simple_add.php

$arg1 = $_GET['arg1'];
$arg2 = $_GET['arg2'];
$return = (int)$arg1 + (int)$arg2;
echo $return;

次のようにテストできます。

class testSimple_add extends PHPUnit_Framework_TestCase {

    private function _execute(array $params = array()) {
        $_GET = $params;
        ob_start();
        include 'simple_add.php';
        return ob_get_clean();
    }

    public function testSomething() {
        $args = array('arg1'=>30, 'arg2'=>12);
        $this->assertEquals(42, $this->_execute($args)); // passes

        $args = array('arg1'=>-30, 'arg2'=>40);
        $this->assertEquals(10, $this->_execute($args)); // passes

        $args = array('arg1'=>-30);
        $this->assertEquals(10, $this->_execute($args)); // fails
    }

}

この例では_execute、GETパラメーターの配列を受け入れ、出力をキャプチャして返すメソッドを宣言しました。インクルードして何度もキャプチャするのではありません。次に、PHPUnitの通常のアサーションメソッドを使用して出力を比較します。

もちろん、テストされたスクリプトは未定義のインデックスエラーを与えるため、3番目のアサーションは失敗します(ただし、error_reportingによって異なります)。

もちろん、テストするときは、error_reportingをに配置する必要がありますE_ALL | E_STRICT

于 2011-02-16T20:03:05.623 に答える