Лучшие вопросы
Таймлайн
Чат
Перспективы
PHPUnit
Из Википедии, свободной энциклопедии
Remove ads
PHPUnit — это фреймворк модульного тестирования для языка программирования PHP. Он является реализацией архитектуры xUnit для фреймворков модульного тестирования, которая зародилась с SUnit[англ.] и стала популярной благодаря JUnit. PHPUnit был создан Себастьяном Бергманном (Sebastian Bergmann), репозиторий размещён на GitHub.
Remove ads
Назначение
PHPUnit основан на идее о том, что разработчики должны иметь возможность быстро находить ошибки в своём новом коде и убеждаться, что в других частях кодовой базы не произошло регрессии. Как и другие фреймворки модульного тестирования, PHPUnit использует утверждения (assertions), чтобы проверить, что поведение конкретного тестируемого компонента — или «модуля» — соответствует ожидаемому.
Преимущества
Цель модульного тестирования — изолировать каждую часть программы и показать, что отдельные части работают корректно. Модульный тест предоставляет строгий контракт, которому должен соответствовать фрагмент кода. В результате использование модульных тестов помогает находить проблемы на раннем этапе цикла разработки.
PHPUnit может выводить результаты тестов в нескольких различных форматах, включая JUnit XML и TestDox[англ.].
Remove ads
Уязвимости
В конце 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 или E, PHPUnit считает тестирование проваленным. Все остальные результаты считаются успешными, а их статусы – информативными.
Remove ads
Примечания
Внешние ссылки
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads