Entropy — это библиотека, предоставляющая инструменты для работы с рандомизированным тестированием в PHPUnit, а также для систем тестирования, использующих случайные функции PHP, такие как rand
и shuffle
.
Иногда модульные тесты требуют внесения изменений в глобальное состояние или охватывают функциональные возможности, изменяющие это состояние. Хотя это никогда не бывает идеальной ситуацией, это часто может привести к созданию непреднамеренных зависимостей от других тестов.
Включение функции перетасовки тестов Entropy меняет порядок ваших тестов, помогая выделить эти зависимости.
Перетасовка тестов Entropy также позволяет избежать изменения порядка тестов с помощью функциональности @depends
PHPUnit; Будущая работа будет направлена на то, чтобы обеспечить возможность перетасовки для этих тестов, когда это необходимо.
Иногда вы можете оказаться в ситуации, когда диапазон входных данных для функции настолько велик, что получение поперечного сечения этих входных данных является более эффективным использованием ваших ресурсов. Но что произойдет, если в этом поперечном сечении есть дыры, из-за которых ваши тесты могут провалиться?
Один из способов обойти это — использовать рандомизированные входные данные, при которых входные данные генерируются таким образом, чтобы получить случайное сечение диапазонов. Другими словами, используя rand
или другой подобный недетерминированный подход.
Расширением этого тестирования на основе свойств является практика применения случайных входных данных к вашему приложению или функции и наблюдение за тем, чтобы выходные данные соответствовали определенным правилам или имели определенные свойства относительно входных данных, а не точная проверка равенства известному результату. набор.
Управляя случайным начальным числом для ваших тестов, Entropy позволяет не только использовать эти подходы, но и сделать их повторяемыми, либо принимая фиксированное начальное число, либо восстанавливая его после последнего неудачного запуска до тех пор, пока ваш набор тестов не будет пройден.
Вы можете добавить эту библиотеку в свой проект с помощью Composer:
$ composer require datto/phpunit-entropy
После настройки вы можете запускать набор тестов как обычно; слушатель позаботится о себе. В случае ошибки или неудачи теста использованное начальное значение будет сохранено во временном файле, так что при следующем запуске оно будет использовано повторно, а не будет создано новое начальное число.
Начальное значение для генератора случайных чисел предоставляется из четырех мест, представленных здесь в порядке приоритета.
Если установлено, переменная среды SEED
будет использоваться для переопределения любых других настроек. Его можно установить с помощью export
, но рекомендуется устанавливать его только для текущего запуска:
SEED=123456 phpunit -c phpunit.xml tests
Начальное число может быть фиксировано конфигурацией; см. раздел «Конфигурация» ниже.
Если тестовый запуск завершается неудачно, использованное начальное значение сохраняется во временном файле. Затем он загружается при последующем тесте и будет сохраняться до тех пор, пока пакет снова не достигнет успеха.
Если с помощью вышеуказанных методов начальное число не установлено, последний метод — использовать функцию PHP rand
.
После установки через композитор настройка прослушивателя тестов сводится к изменению файла конфигурации PHPUnit (часто phpunit.xml
):
< phpunit xmlns : xsi = " http://www.w3.org/2001/XMLSchema-instance "
xsi : noNamespaceSchemaLocation = " http://schema.phpunit.de/4.1/phpunit.xsd "
backupGlobals = " false "
colors = " true "
bootstrap = " bootstrap.php "
>
< listeners >
< listener class = " DattoPHPUnitEntropyListener " >
< arguments >
< array >
< element key = " seeding " >
< array >
< element key = " enabled " >
< boolean >true</ boolean >
</ element >
< element key = " seed " >
< integer >1234567</ integer >
</ element >
< element key = " file " >
< string >/tmp/phpentropy-seed</ string >
</ element >
</ array >
</ element >
< element key = " shuffle " >
< boolean >true</ boolean >
</ element >
</ array >
</ arguments >
</ listener >
</ listeners >
</ phpunit >
Если установлено значение true, генератор случайных чисел будет заполнен прослушивателем.
Если вы установите начальное значение с помощью этого аргумента, только это значение будет использоваться для заполнения генератора случайных чисел. См. раздел о приоритете семян ниже.
Если установлено, этот файл будет использоваться для хранения последнего неудачного случайного начального числа; по умолчанию это [TMPDIR LOCATION]/phpunit-entropy-seed
.
Если установлено значение true, порядок выполнения модульных тестов будет рандомизированным (за исключением наборов, в которых используется @depends
). Это полезно при определении и выявлении межтестовых зависимостей.
Кристофер Холт <[email protected]>