Отслеживание предыдущего вызова метода в PHP - PullRequest
1 голос
/ 11 сентября 2011

Вариант использования : я пытаюсь создать диагностический тест для моей среды модульного тестирования, которая запускает каждый тестовый пример, а затем возвращает список открытых методов, которые еще не были охвачены тестовым примером.Идея состоит в том, чтобы увеличить охват тестами, убедившись, что все общедоступные методы каждого из них протестированы, по крайней мере, на 1 модульном тесте.

Проблема : у меня возникают проблемы с обнаружением метода изкласс был назван.Я попытался использовать функцию debug_backtrace (), но она возвращает только вызовы из тестовой среды, а не метод класса, который тестируется.Единственный способ получить имя запускаемого метода - это поместить функцию debug_backtrace () в метод тестируемого класса, что является недопустимым параметром, так как он должен быть в каждом открытом методе каждого класса.

Есть ли альтернативный способ сделать обратную трассировку, чтобы получить проверенный метод класса?Или, в несколько ином подходе, есть ли способ запустить и остановить слушателя, который будет записывать все вызываемые методы (я могу разобрать все, что не принадлежит)?

Псевдо-код :

runTest($testName){

   //run the test
   //get all recent classes and methods used
   //parse out test framework info
   //compare used public methods to public method list for the tested class

}

или:

runTest($testName){

   //start listener
   //run the test
   //close listener, get all recent classes and methods used
   //parse out test framework info
   //compare used public methods to public method list for the tested class

}

Ответы [ 2 ]

2 голосов
/ 11 сентября 2011

См. Инструменты покрытия кода для PHP , Xdebug 2: Анализ покрытия кода и PHP_CodeCoverage Себастьяна Бергмана * для некоторых распространенных способов решения вашей проблемы.

То, что вы хотите, обычно делается за просмотром php извне.Использование debug_backtrace() является медленным и, как вы сами сказали, на него нельзя полностью положиться, поскольку вам действительно нужен наблюдатель, который не изменяет поведение вашего php-скрипта (например, включая ваши тестовые методы в backtrace).

1 голос
/ 11 сентября 2011

См. Наш Инструмент для тестирования PHP .Он собирает данные о тестовом покрытии во время работы вашей программы без использования xdebug.Это делается путем временной вставки инструментария в ваш код, например, на время процесса тестирования.

Вы получаете данные о тестовом покрытии, отображаемые с наложенным на код кодом в приятном пользовательском интерфейсе, чтобы вы могли видеть, чтоохвачены (другой ОП указал, что метод может быть выполнен, но бесполезно охвачен).Вы также получите отчет с указанием того, что не охватывалось, что соответствует иерархии вашего кода.XML-версия содержит информацию, которую вы хотите: такой-то метод не был / не был рассмотрен и в какой степени.

...