【问题标题】:Code coverage tool for hack languagehack 语言的代码覆盖工具
【发布时间】:2015-01-16 10:00:38
【问题描述】:

是否有 Hack 语言的代码覆盖工具(在 hhvm 上)?

这个问题不是关于在 hhvm 上运行的 PHP 源代码的代码覆盖率(例如可以使用 PHPUnit),而是生成用 hack 语言编写的源代码的代码覆盖率。

【问题讨论】:

    标签: code-coverage hacklang


    【解决方案1】:

    当前版本的 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
    

    我同意 Ira 的代码覆盖使用 XDEBUG。但是由于某种原因,PHPUnit 还没有决定让 HackLang 代码覆盖。

    第一次更新:

    这是因为 Hacklang 有更多的注册命令(如形状、类型)和更多的结构(lambda),php-token-stream 无法识别它们。

    虽然修复非常简单,您可以创建未定义的类并从 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

    【讨论】:

      【解决方案2】:

      Hack 代码的内部表示非常类似于 PHP。根据现有代码覆盖率库如何进行检查,它们可能会正常工作。您是否尝试过使用 PHPUnit 在 Hack 代码上编写测试用例?例如,他们的报道可能会奏效!

      【讨论】:

      • 是的,我们尝试了 PHPUnit。它适用于运行测试(hhvm 运行 Hack 与 PHP 没有什么不同)。但是在解析 Hack 源文件时,Coverage 失败并出现错误。
      【解决方案3】:

      虽然在 PHPUnit 中编写测试代码对 OP 可能很有用,但大多数 PHP 测试覆盖工具(包括我理解的 PHPUnit)都使用 XDEBUG 来收集它们的测试覆盖数据。我不熟悉 Hack 的实现,但我知道它与 Zend 无关……所以它包含 XDEBUG 的可能性似乎有点遥远。 (也许 Hack 完全复制了 XDEBUG?)如果 XDEBUG 在 Hack 下不可用,那么那些基于 XDEBUG 的覆盖工具实际上无法收集他们需要的数据。

      在某种程度上,Hack 与 PHP 相同,我们的 PHP Test Coverage Tool 可能会直接工作。它检测 source 代码,因此不依赖于 XDEBUG 的存在。我怀疑 PHPUnit 很容易适应。

      (如果 Hack 不完全相同,可以修改测试覆盖工具以非常容易地处理更改的语法,因为它基于通用程序转换系统)。

      【讨论】:

      • HHVM 我认为从 3.4 版开始支持大部分 xdebug,就在最近。它应该像在 PHP 上一样在 Hack 代码上工作,但 HHVM 只支持用于 IDE 调试器的 xdebug 的常见位,因此它可能支持也可能不支持 PHPUnit 需要用于覆盖数据的位。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多