手続き型コードをテストする方法はありますか?私は、自動テストを作成するための優れた方法のように思われるPHPUnitを見てきました。ただし、オブジェクト指向コードを対象としているようですが、手続き型コードに代わるものはありますか?
または、Webサイトをテストする前に、Webサイトをオブジェクト指向に変換する必要がありますか?時間を無駄にする時間があまりないので、これには少し問題があるかもしれません。
ありがとう、
ダニエル。
手続き型コードをテストする方法はありますか?私は、自動テストを作成するための優れた方法のように思われるPHPUnitを見てきました。ただし、オブジェクト指向コードを対象としているようですが、手続き型コードに代わるものはありますか?
または、Webサイトをテストする前に、Webサイトをオブジェクト指向に変換する必要がありますか?時間を無駄にする時間があまりないので、これには少し問題があるかもしれません。
ありがとう、
ダニエル。
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
。