PHPUnit: Или еще раз про тестирование кода

Как уже ранее писалось тестирование кода существенно упрощает его эксплуатацию. Я пишу на php, для тестирования использую phpunit.
PHPUnit — средство модульного тестирования веб-приложений, написанных на PHP.

Установка делается по мануалу (https://github.com/sebastianbergmann/phpunit/#php-archive-phar) в 3 команды:

$ wget https://phar.phpunit.de/phpunit.phar
$ chmod +x phpunit.phar
$ mv phpunit.phar /usr/local/bin/phpunit

Если у вас возникла ошибка вида «PHP Fatal error: Class ‘PHPUnit_Framework_TestCase’ not found in«, то вам надо немного обновить код тестов:

For those arriving here after updating phpunit to version 6 released on 2017-02-03
(e.g. with composer), you may be getting this error because phpunit code is now
namespaced (check changelog). You will need to refactor things
like \PHPUnit_Framework_TestCase to \PHPUnit\Framework\TestCase

Для примера, ниже код, который проверяет наличие необходимых классов и процедур одного из моих проектов:

<?php
 
class php7_compatibility extends \PHPUnit\Framework\TestCase
{
    private $calculator;
    private $function_test = array(
        "imagecreatefromjpeg" => "php-gd",
        "mb_strtoupper" => "php-mbstring",
        "geoip_record_by_name" => "",
        "json_encode" => "php-pecl-json",
        "mb_strlen" => "",
        "mb_strtolower" => ""
    );
 
    private $class_test = array(
        "Memcached" => "",
        "DomXPath" => "",
        "GearmanClient" => "",
        "ZipArchive" => "",
    );
 
    protected function setUp()
    {
#        $this->calculator = new Calculator();
    }
 
    protected function tearDown()
    {
#        $this->calculator = NULL;
    }
 
    public function testLoadFunction()
    {
        foreach ($this->function_test as $function_name => $function_packet) {
            $message = $function_name . ' не найдена. Необходим пакет ' . $function_packet;
            $this->assertTrue(function_exists($function_name), $message);
        }
    }
 
    public function testLoadClass()
    {
        foreach ($this->class_test as $class_name => $class_packet) {
            $message = $class_name . ' не установлен';
            $this->assertTrue(class_exists($class_name), $message);
        }
    }
}

Даже такой простой тест, поможет в дальнейшем избежать проблем при миграциях, обновлениях или переходах между версиями ПО.

Вы можете оставить комментарий ниже.