PHP-версия | Атум версия |
---|---|
5.3 -> 5.6 | 1.х -> 3.х |
7.2 -> 8.1 | 4.Х -> 4.1 |
8.х | 4,1 < 4,X (текущий) |
Как и SimpleTest или PHPUnit, atoum — это среда модульного тестирования, специфичная для языка PHP. Однако с самого начала он был разработан с учетом следующих идей:
Может быть реализован быстро ,
Упрощение разработки тестов,
Разрешить писать надежные, читаемые и понятные модульные тесты.
Для этого он широко использует возможности PHP , предоставляя разработчику совершенно новый способ написания модульных тестов. Поэтому его можно чрезвычайно легко установить и интегрировать в существующий проект, поскольку это всего лишь один архив PHAR , который является единственной точкой входа для разработчика. Кроме того, благодаря гибкому интерфейсу он позволяет писать модульные тесты способом, близким к естественному языку. Это также упрощает реализацию заглушек в тестах благодаря разумному использованию анонимных функций и замыканий . Atoum изначально и по умолчанию выполняет выполнение каждого модульного теста в отдельном процессе PHP, чтобы обеспечить изоляцию . Конечно, его можно легко использовать для непрерывной интеграции, а учитывая его конструкцию, его можно очень легко адаптировать к конкретным потребностям. atoum также выполняет все это, не влияя на производительность, поскольку он был разработан для уменьшения объема памяти, одновременно позволяя ускорить выполнение тестов. Он также может генерировать отчеты о выполнении модульных тестов в формате Xunit, что делает его совместимым с инструментами непрерывной интеграции, такими как Jenkins. Atoum также генерирует отчеты о покрытии кода, чтобы можно было контролировать модульные тесты. Наконец, хотя он разработан в основном для UNIX, он также может работать и в Windows.
atoum действительно легко установить: клонируйте его с github, загрузите PHAR или просто используйте композитор,
Atoum обеспечивает высокий уровень безопасности во время выполнения теста, изолируя каждый метод тестирования в отдельном процессе PHP. Разумеется, эта функция доступна «из коробки», никаких дополнительных расширений устанавливать не нужно.
Atoum запускает тесты в параллельной среде, обеспечивая максимально быструю работу пакета за счет использования преимуществ современных многоядерных процессоров.
atoum предоставляет полнофункциональный набор естественных и выразительных утверждений, делающих тесты максимально читабельными. Вот пример:
<?php$this->целое число(150) ->isGreaterThan(100) ->isLowerThanOrEqualTo(200) ;
atoum поддерживает BDD-подобный синтаксис с множеством структурных ключевых слов:
<?php$this->given($testedInstance = новый протестированныйкласс()) ->and($testedClass[] = $firstValue = uniqid()) ->then->sizeof($testedInstance)->isEqualTo(1) ->string($testedClass[0])->isEqualTo($firstValue) ;
atoum предоставляет очень простой, но очень мощный макетный движок:
<?php$this->given($testedInstance = новый протестированныйкласс()) ->and($aMock = newockfoobar()) // здесь динамически создается макет класса foobar->and($this->calling($aMock)->doOtherThing = true) // каждый вызов doOtherThing( ) экземпляром вернет true->and($testedInstance->setDependency($aMock)) ->then->boolean($testedInstance->doSomething())->isTrue() ->mock($aMock) ->call('doOtherThing')->withArguments($testedInstance)->once() // Утверждает, что метод doOtherThing() $aMock был вызван один раз;
Atoum предоставляет понятный API для подтверждения исключений:
<?php$this->given($testedInstance = новый протестированныйкласс()) ->and($aMock = newockfoobar()) // здесь динамически создается макет класса foobar->and($this->calling($aMock)->doOtherThing->throw = $Exception = новое исключение( )) // Вызов doOtherThing() вызовет исключение->and($testedInstance->setDependency($aMock)) ->then->Exception(function() use ($testedInstance) { $testedInstance->doSomething(); }) ->isIdenticalTo($исключение) ;
atoum также позволяет имитировать собственные функции PHP. Опять же, это доступно из коробки:
<?php$this->given($this->function->session_start = false) ->and($session = новый протестированныйкласс()) ->then->Exception(function () use ($session) { $session->start(); }) ->isInstanceOf('исключение пространства имен проекта') ->hasMessage('Невозможно начать сеанс') ->function('session_start')->wasCalled()->once() ;
Atoum может создавать несколько отчетов, таких как TAP, clover, xUnit, которые можно легко интегрировать с Jenkins или любым другим инструментом непрерывной интеграции.
atoum поддерживает поставщиков данных,
Тесты atoum поддерживают автозапуск: просто включите средство запуска atoum и запустите тест, используя php path/to/test/file.php
,
Файл конфигурации atoum написан исключительно на PHP (без XML, YAML или любого другого формата), что обеспечивает максимальную гибкость:
<?php$script->addDefaultArguments('--test-it', '-ncc');$runner->addTestsFromDirectory(__DIR__ . '/tests/units/classes');$testGenerator = новый atoumatoumtestgenerator();$ testGenerator->setTestClassesDirectory(__DIR__ . '/tests/units/classes'); ->setTestClassNamespace('atumatoumtestsunits'); ->setTestedClassesDirectory(__DIR__ . '/classes'); ->setTestedClassNamespace('atumatoum') ->setRunnerPath(__DIR__ . '/scripts/runner.php') ;$runner->setTestGenerator($testGenerator);
atoum предоставляет автоматический генератор тестовых шаблонов,
atoum предоставляет режим цикла для легкого повторного запуска неудачных тестов,
Atoum полон других интересных функций, которые вы обнаружите со временем.
Для работы atoum абсолютно необходим PHP >= 5.6.0
или более поздняя версия. В UNIX, чтобы проверить, правильная ли у вас версия PHP, вам просто нужно запустить в терминале следующую команду:
$ php -v | grep -oE 'php 5.3.(?:[3-9]|[1-9][0-9])|5.[4-6].[0-9]+|[5-8].[ 0-9]+.[0-9]+'
Если отображается PHP 5.6.x
или его эквивалент, значит, у вас установлена правильная версия PHP. Если вы хотите использовать atoum , используя его архив PHAR, вам также понадобится PHP для доступа к модулю phar
, который обычно доступен по умолчанию. В UNIX, чтобы проверить, есть ли у вас этот модуль или нет, вам просто нужно запустить в терминале следующую команду:
$ php -м | греп -и фар
Если отображается Phar
или его эквивалент, значит, модуль установлен правильно. Для создания отчетов в формате Xunit требуется модуль xml
. В UNIX, чтобы проверить, есть ли у вас этот модуль или нет, вам просто нужно запустить в терминале следующую команду:
$ php -м | греп -я XML
Если отображается Xml
или его эквивалент, значит, модуль установлен правильно. Если вы хотите отслеживать степень покрытия вашего кода модульными тестами, вам потребуется модуль Xdebug 2.3. В UNIX, чтобы проверить, есть ли у вас этот модуль или нет, вам просто нужно запустить в терминале следующую команду:
$ php -v | grep -oi 'xdebug'
Если отображается Xdebug
или его эквивалент, значит, модуль установлен правильно.
Вам просто нужно загрузить архив PHAR и сохранить его где хотите, например, в /path/to/project/tests/atoum.phar
. Этот архив PHAR содержит последнюю версию разработки, прошедшую все модульные тесты Atoum . Исходный код atoum также доступен в репозитории GitHub. Чтобы проверить, правильно ли работает atoum с вашей конфигурацией, вы можете выполнить все его модульные тесты. Для этого вам просто нужно запустить в терминале следующую команду:
$ php atoum.phar --test-it
Используя предпочитаемый вами текстовый редактор, создайте path/to/project/tests/units/helloWorld.php
и добавьте следующий код:
<?phpnamespacevendorprojecttestsunits;require_once 'path/to/atoum.phar';include_once 'path/to/project/classes/helloWorld.php';используйте atoumatoum;используйте вендорпроект;класс helloWorld расширяет atoumtest {публичная функция testSay() {$helloWorld = новый проектhelloWorld();$this->string($helloWorld->say())->isEqualTo('Hello World!'); } }
Запустите терминал и выполните следующую команду:
$ php путь/к/тесту/файлу[введите]
Вы должны получить следующий результат или что-то эквивалентное:
> Atoum версия XXX Фредерика Харди. Ошибка: автоматическое исключение: протестированный класс «vendorprojecthelloWorld» не существует для тестового класса «vendorprojecttestsunitshelloWorld».
Снова используя предпочитаемый вами текстовый редактор, создайте path/to/project/classes/helloWorld.php
и добавьте следующий код:
<?phpnamespacevendorproject;класс helloWorld {публичная функция сказать() {return 'Привет, мир!'; } }
В том же терминале еще раз выполните следующую команду:
$ php путь/к/тесту/файлу[введите]
Вы должны получить следующий результат или что-то эквивалентное:
> Atoum версии 288 от Фредерика Харди. > ЗапуститеvendorprojecttestssunitshelloWorld... [С_________________________________________________________][1/1] => Продолжительность теста: 0,00 секунды. => Использование памяти: 0,25 МБ.> Общая продолжительность теста: 0,00 секунды.> Общее использование тестовой памяти: 0,25 МБ.> Значение покрытия кода: 100,00%> Продолжительность выполнения: 0,08 секунды.> Успех (1 тест, 1 метод, 2 утверждения). , 0 ошибка, 0 исключение)!
<?phpnamespacevendorprojecttestsunits;require_once 'path/to/atoum.phar';include_once 'path/to/project/classes/helloWorld.php';используйте atoumatoum;используйте вендорпроект;класс helloWorld расширяет atoumtest {публичная функция test__construct() {$helloWorld = новый проектhelloWorld();$this->string($helloWorld->say())->isEqualTo('Привет!') ->string($helloWorld->say($name = 'Фредерик Харди'))->isEqualTo('Hello ' . $name . '!') ; } }
Документация atoum все еще находится в стадии написания. Любая помощь в его улучшении будет оценена по достоинству. Однако, если вы хотите немедленно изучить возможности atoum , мы рекомендуем:
Запустив в своем терминале команду php atoum.phar -h
или команду php scripts/runner.php -h
,
Изучение содержимого каталога configurations
в исходном коде atoum , поскольку оно содержит образцы файлов конфигурации.
Изучение содержимого tests/unit/classes
в исходном коде atoum , поскольку оно содержит все модульные тесты,
Прочтите слайды (французской) конференции об этом, доступные в Интернете,
Прочтите (французскую) вики,
Присоединяйтесь к каналу обсуждения,
Задавайте вопросы по электронной почте по адресу support[AT]atoum(DOT)org .
В этом случае первое, что вам нужно сделать, это подтвердить, установлена ли у вас последняя версия архива. Вам просто нужно скачать его еще раз. Если это по-прежнему не работает, выполните следующую команду в окне терминала:
$ php -n atum.phar -v
Если вы получили номер версии atoum , проблема связана с вашей конфигурацией PHP. В большинстве случаев причина кроется в расширениях, которые могут быть несовместимы с форматом PHAR или препятствовать выполнению архивов PHAR в качестве меры безопасности. Например, расширение ioncube
кажется несовместимым с архивами PHAR, и поэтому вам необходимо деактивировать его, если вы его используете, закомментировав следующую строку в вашем php.ini
, добавив к ней префикс ;
характер:
zend_extension = /path/to/ioncube_loader*.*
Расширение suhosin
предотвращает выполнение архивов PHAR, поэтому его конфигурацию по умолчанию необходимо изменить, чтобы можно было использовать atoum , добавив следующую строку в файл php.ini
:
suhosin.executor.include.whitelist="phar"
Наконец, если запуск atoum приводит к отображению на экране символов, похожих на ???%
, это может быть связано с тем, что для директивы detect_unicode
внутри вашего файла php.ini
установлено значение 1. Чтобы решить проблему, вам просто нужно установить для нее значение 0 с помощью отредактируйте файл php.ini
или запустите atoum с помощью следующей команды:
$ php -dDetect_unicode=0 atum.phar [опции]
Если эти три операции не позволяют atoum работать, мы предлагаем вам отправить электронное письмо на адрес support[AT]atoum(DOT)org , подробно описав вашу конфигурацию и вашу проблему. Вы также можете попросить помощи у разработчиков atoum на дискуссионном канале репозитория atoum.
__COMPILER_HALT_OFFSET__
уже определена /path/to/atoum.phar
Эта ошибка возникает из-за того, что архив atoum PHAR включен в более чем одно место вашего кода с помощью include
или require
. Чтобы решить эту проблему, вам просто нужно включить архив, используя только include_once
или require_once
, чтобы он не включался несколько раз.
APC — это бесплатная, открытая и надежная платформа для кэширования и оптимизации промежуточного кода PHP, распространяемая в виде расширения PHP. При тестировании классов, использующих APC, вы можете получить сообщение об ошибке, показывающее, что функция apc_fetch
не может получить значение. Как и все расширения PHP, APC имеет некоторые параметры конфигурации для его включения:
apc.enabled
— включить или отключить APC,
apc.enable_cli
— включить или отключить APC для PHP CLI.
Чтобы использовать APC с atoum , вам необходимо установить apc.enabled
и apc.enable_cli
значение 1
, в противном случае он не будет включен для версии PHP CLI, которая используется atoum .
При использовании atoum и насмешливых объектов вы иногда будете получать ошибки сегментации, исходящие от PHP. Эти ошибки сегментов вызваны XDebug в версии ниже 2.1.0, в которой в некоторых случаях возникают проблемы с обработкой отражения. Чтобы проверить текущую версию XDebug, вы можете запустить php -v
. Чтобы решить эту проблему, вам необходимо обновить XDebug до последней стабильной версии. Если вы не можете обновить XDebug в своей системе, вы все равно можете отключить расширение, чтобы избежать ошибок сегментации. Чтобы убедиться, что XDebug успешно обновлен или отключен, вы можете запустить php -v
. Когда вы закончите обновление или отключите XDebug, запустите php atoum.phar --test-it
чтобы убедиться, что все ошибки сегментов устранены и atoum работает.
Ищете дорожную карту?
Вот работа в процессе,
И вот что будет в следующих выпусках.
Atoum был создан Фредериком Харди. Сейчас им руководит сильное сообщество участников. Вы можете найти их в списке коммиттеров или в команде участников.
atoum выпускается под лицензией BSD-3-Clause. Подробности смотрите в прилагаемом файле ЛИЦЕНЗИИ.