Итак, мутант сбежал. Что теперь?
Мне только что удалось впервые запустить тестирование на мутации. Моя обычная среда тестирования - Codeception, но на момент написания она несовместима с тестированием мутаций (хотя я считаю, что над ней ведется работа, и это не за горами). Я использую PHPUnit и Infection, и ни один из них не кажется простым в использовании.
Мой набор тестов произвел десять мутантов. Девять человек погибли, один скрылся. Однако я не знаю, какую часть кода или тестов нужно улучшить, чтобы убить последнего мутанта.
Как получить информацию о том, какой код позволил мутанту сбежать?
1 ответ
В этом блоге я нашел то, что не смог найти в документации Infection: результаты сохраняются вinfection.log
.
Файл журнала выглядит так:
Escaped mutants:
================
1) <full-path-to-source-file>.php:7 [M] ProtectedVisibility
--- Original
+++ New
@@ @@
use stdClass;
trait HiddenValue
{
- protected function hidden_value($name = null, $value = null)
+ private function hidden_value($name = null, $value = null)
{
static $data = [];
$keys = array_map(function ($item) {
Timed Out mutants:
==================
Not Covered mutants:
====================
В нем говорится, что мутация изменила protected
видимость для private
и что в результате ни одно испытание не провалилось. Если это важно, теперь я могу либо изменить код, либо написать другой тест, чтобы охватить этот случай.
Теперь, когда я нашел это, я поискал на веб-сайте Infection по запросу infection.log
и нашел --show-mutations
или -s
который будет выводить экранированные мутанты на консоль во время работы.