2015-01-09 2 views
3

Есть ли инструмент покрытия кода для языка Hack (на hhvm)?Инструмент покрытия кода для взлома языка

Этот вопрос касается не кодового покрытия исходного кода PHP, работающего на hhvm (что возможно с использованием PHPUnit, например), но для генерации кода кода исходного кода, написанного на языке взлома.

ответ

4

Текущая версия PHPUnit (4.4.4.5.4.6) не создает покрытие, и эта ошибка не выполняется.

$php phpunit-alpha.phar -coverage-html=cover t/ 
PHPUnit alpha-2015-01-09 by Sebastian Bergmann and contributors. 

PHPUnit alpha-2015-01-09 by Sebastian Bergmann and contributors. 
Fatal error: Class undefined: PHP_Token_TYPELIST_LT in phar://phpunit-alpha-2015-01-09.phar/php-token-stream/Token/Stream.php on line 185 

Я согласен, что с Ирой, что покрытие кода использует XDebug. Однако по какой-то причине PHPUnit не решил охватить кодом HackLang.

первое обновление:

Это происходит потому, что Hacklang имеет более зарегистрированных команд (например, форма, тип) и более структур (лямбда), который PHP-маркер-поток не способен распознать их.

Исправление довольно просто, но вы можете создать класс, который не определен, и расширить его от PHP_Token. Например, для моего проекта я должен был создать эти классы:

class PHP_Token_TYPELIST_LT extends PHP_Token {} 
class PHP_Token_TYPELIST_GT extends PHP_Token {} 
class PHP_Token_TYPE extends PHP_Token {} 
class PHP_Token_SHAPE extends PHP_Token {} 
class PHP_Token_LAMBDA_OP extends PHP_Token {} 
class PHP_Token_LAMBDA_CP extends PHP_Token {} 
class PHP_Token_LAMBDA_ARROW extends PHP_Token {} 

Второе обновление:

PHPUnit использует CodeCoverage обнаружить выполненную линию и в этом проекте, на HHVM он использует fb_get_code_coverage

1

Внутреннее представление кода Hack очень похожее на PHP. В зависимости от того, насколько точно существующие библиотеки покрытия кода выполняют свою проверку, возможно, что они будут работать. Вы пытались использовать PHPUnit для написания тестовых примеров по Hack-коду? Их охват, например, может просто работать!

+0

Да, мы попробовали PHPUnit. Он хорошо работает для запуска тестов (hhvm run Hack не отличается от PHP). Но Coverage не удалось с ошибками при анализе исходного файла Hack. – farzad

1

Хотя может быть полезно для ОП до написать тестовый код в PHPUnit, большинство инструментов покрытия PHP (включая PHPUnit, как я его понимаю) используют XDEBUG для сбора их данных тестового покрытия. Я не знаком с реализацией Hack, но я понимаю, что это не имеет ничего общего с Zend ... поэтому вероятность того, что он содержит XDEBUG, кажется удаленным. (Может быть, Hack точно скопировал XDEBUG?) Если XDEBUG недоступен в Hack, эти инструменты покрытия на основе XDEBUG буквально не могут собирать нужные им данные.

В той степени, в которой Hack идентичен PHP, наш PHP Test Coverage Tool, вероятно, будет работать напрямую. Это инструменты код источника, и поэтому никак не зависит от существования XDEBUG. Я подозреваю, что PHPUnit можно легко адаптировать.

(Если Hack не совсем то же самое, инструмент для тестирования можно пересмотреть, чтобы обрабатывать измененный синтаксис довольно легко, поскольку он основан на системе преобразования программ общего назначения).

+0

HHVM поддерживает большую часть xdebug с версии 3.4. Я думаю, довольно недавно. Он должен работать с кодом Hack так же хорошо, как и на PHP, но HHVM поддерживает только общие биты xdebug, используемые для отладчиков IDE, поэтому он может поддерживать или не поддерживать биты, которые нужны PHPUnit для данных покрытия. –