Подтвердить что ты не робот

Тестирование PHP, для процедурного кода

Есть ли способ тестирования процедурного кода? Я смотрел PHPUnit, который кажется отличным способом создания автоматических тестов. Однако, похоже, он ориентирован на объектно-ориентированный код, есть ли альтернативы для процедурного кода?

Или мне нужно преобразовать веб-сайт в объект, ориентированный прежде чем пытаться протестировать веб-сайт? Это может занять некоторое время, что является проблемой, поскольку у меня нет много времени на то, чтобы тратить время.

Спасибо,

Даниил.

4b9b3361

Ответ 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.