Infection + Testo
Свершилось: Infection 0.33.0 вышел со встроенной поддержкой Testo. Мутационное тестирование теперь работает из коробки.
Если вы вдруг ещё не в теме, что такое мутационное тестирование и зачем оно вам нужно — у меня есть отдельная статья, где я разбираю, почему 100% line coverage ничего не гарантирует, и как мутанты находят те дыры, которые ваши тесты пропускают мимо.
Что значит «из коробки»
До этого момента Infection знал про три фреймворка: PHPUnit, PhpSpec и Codeception. В 0.33.0 Testo встал в общий ряд четвёртым.
Phar-архив Infection уже содержит адаптер внутри себя — если вы запускаете Infection через Phar, больше ничего ставить не нужно, Testo подхватится автоматически.
Если вы предпочитаете ставить Infection через Composer, понадобится отдельный пакет — testo/bridge-infection. В infection.json указываете "testFramework": "testo", в testo.php регистрируете плагин Codecov с отчётом PhpUnitXmlReportnew PhpUnitXmlReport(string $outputDir)Генерирует отчёт в формате PHPUnit Coverage XML — директорию с индексом и отдельным файлом для каждого исходника.. Дальше можно поставить адаптер руками:
composer require --dev infection/infection testo/bridge-infectionА можно просто запустить vendor/bin/infection — он увидит testFramework: testo в конфиге и сам предложит подтянуть пакет.
Подробная инструкция со всеми нюансами лежит на странице бриджа Infection.
Дальше будет проще
Сейчас в конфигах ещё приходится прописывать пару путей: временную директорию в infection.json и coverage-XML в testo.php. План — спрятать их в адаптер, чтобы для Infection не приходилось трогать testo.php вовсе.
А ещё в планах — отдельные скиллы под Infection: как запускать мутационное тестирование и как эффективнее раскидывать выживших мутантов.
Если у вас уже стоит Testo и написаны тесты — попробуйте прогнать по ним Infection. Скорее всего, вас ждёт несколько сюрпризов.
