Share to: share facebook share twitter share wa share telegram print page

PHPUnit

PHPUnit
Логотип программы PHPUnit
Тип Фреймворк модульного тестирования
Разработчик Sebastian Bergmann
Написана на PHP
Операционная система Кроссплатформенный
Языки интерфейса английский
Первый выпуск 15 марта 2004; 21 год назад (2004-03-15)[1]
Аппаратная платформа кроссплатформенность
Последняя версия 12 (7 февраля 2025; 6 месяцев назад (2025-02-07)[2])
Репозиторий github.com/sebastianberg…
Лицензия BSD 3 Clause
Сайт phpunit.de

PHPUnit — это фреймворк модульного тестирования для языка программирования PHP. Он является реализацией архитектуры xUnit для фреймворков модульного тестирования, которая зародилась с SUnit[англ.] и стала популярной благодаря JUnit. PHPUnit был создан Себастьяном Бергманном (Sebastian Bergmann), репозиторий размещён на GitHub.

Назначение

PHPUnit основан на идее о том, что разработчики должны иметь возможность быстро находить ошибки в своём новом коде и убеждаться, что в других частях кодовой базы не произошло регрессии. Как и другие фреймворки модульного тестирования, PHPUnit использует утверждения (assertions), чтобы проверить, что поведение конкретного тестируемого компонента — или «модуля» — соответствует ожидаемому.

Преимущества

Цель модульного тестирования — изолировать каждую часть программы и показать, что отдельные части работают корректно. Модульный тест предоставляет строгий контракт, которому должен соответствовать фрагмент кода. В результате использование модульных тестов помогает находить проблемы на раннем этапе цикла разработки.

PHPUnit может выводить результаты тестов в нескольких различных форматах, включая JUnit XML и TestDox[англ.].

Уязвимости

В конце 2017 года была обнаружена уязвимость CVE-2017-9841, позволявшая злоумышленникам выполнять удалённый код через PHPUnit. Отправляя на веб-сервер файл, являющийся частью PHPUnit, злоумышленник мог исполнить PHP-код этого файла на этом веб-сервере. Уязвимость была устранена разработчиком в релизах 7.5.20 и 8.5.2 от 8 января 2020 года[3].

Процесс тестирования

Пример кода

<?php

use PHPUnit\Framework\TestCase;

class ExampleTest extends TestCase
{
    public function test_emptyStack(): void
    {
        $empty_stack = array();
        $this->assertEquals(0, count($empty_stack));
        $this->assertCount(0, $empty_stack);
    }

    public function test_PushAndPop()
    {
        $stack = array('foo');
        $this->assertEquals(1, count($stack));

        array_push($stack, 'bar');
        $this->assertEquals('bar', $stack[count($stack)-1]);
        $this->assertEquals(2, count($stack));
        $this->assertCount(2, $stack);

        $popped = array_pop($stack);
        $this->assertEquals('bar', $popped);
        $this->assertEquals(1, count($stack));
        $this->assertCount(1, $stack);
    }
}

Запуск тестов

Исполнение вышеприведённого кода запускает 2 теста, производящих суммарно 9 сравнений (ассертов) — 2 сравнения в первом тесте и 7 во втором. При этом некоторые из этих сравнений семантически идентичны — оба сравнения в тесте test_emptyStack проверяют одно и то же (количество элементов в массиве), но синтаксис второго доступен лишь с PHPUnit версии 3.6.0 и выше.

По окончании работы в консоль (по-умолчанию) будет выведено примерно следующее сообщение:

PHPUnit 12.3.0 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.3.23
Configuration: /home/runner/work/exampleproject/phpunit.xml

..                                 2 / 2 (100%)

Time: 00:00.042, Memory: 20.00 MB

OK (2 tests, 9 assertions)

Условные обозначения[4]

Символ Результат выполнения
. Тест успешно выполнен
F Тест завершился с ошибкой – встретилось неверное утверждение (assertion)
E Ошибка выполнения кода во время выполнения теста (например, у объекта вызван несуществующий метод)
W Тест пройден, но вызвал предупреждение (warning)
R Тест помечен как рискованный (например, в тесте не было проверено ни одного утверждения)
D Тест вызвал устаревшую функциональность (deprecation)
N Тест вызвал уведомление (notice)
I Тест помечен как неполный
S Тест был пропущен

Если во время выполнения тестов любой из них завершается с результатом F или E, PHPUnit считает тестирование проваленным. Все остальные результаты считаются успешными, а их статусы – информативными.

Примечания

  1. Sebastian Bergmann blog. sebastian-bergmann.de. Дата обращения: 27 августа 2025. Архивировано 5 марта 2016 года.
  2. Release Announcement for Version 12 of PHPUnit (англ.). phpunit.de. Дата обращения: 27 августа 2025.
  3. Sebastian, Bergmann. PHPUnit: A Security Risk? The PHP Consulting Company. Дата обращения: 20 октября 2020.
  4. 3. The Command-Line Test Runner — PHPUnit 12.3 Manual. docs.phpunit.de. Дата обращения: 27 августа 2025.

Внешние ссылки

  • phpunit.de — официальный сайт PHPUnit
Prefix: a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9

Portal di Ensiklopedia Dunia

Kembali kehalaman sebelumnya