Вы можете протестировать процедурный код с помощью PHPUnit. Модульные тесты не привязаны к объектно-ориентированному программированию. Они тестируют блоки кода. В объектно-ориентированном стиле единицей кода является метод. В процедурном 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.
Конечно, третье утверждение не будет выполнено (хотя это зависит от error_reporting), потому что тестируемый сценарий выдаст ошибку Undefined index.
Конечно, при тестировании вы должны поставить error_reporting в E_ALL | E_STRICT
.
person
netcoder
schedule
16.02.2011