Ответ 1
Вы можете протестировать процедурный код с помощью PHPUnit. Модульные тесты не привязаны к объектно-ориентированному программированию. Они проверяют единицы кода. В OO единица кода - это метод. В процедуре PHP я предполагаю, что это целый script (файл).
В то время как код OO легче поддерживать и тестировать, это не означает, что процедурный PHP не может быть протестирован.
Например, у вас есть этот script:
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), потому что проверенный script даст ошибку индекса Undefined.
Конечно, при тестировании вы должны поставить error_reporting в E_ALL | E_STRICT
.