有人知道如何从 PHPSpec 测试生成覆盖率报告的方法吗?
我考虑过使用 xdebug,但据我所知它不能为 Jenkins 生成报告。
有人知道如何从 PHPSpec 测试生成覆盖率报告的方法吗?
我考虑过使用 xdebug,但据我所知它不能为 Jenkins 生成报告。
当前版本(1.4.0)不支持代码覆盖率。欢迎您的反馈。以下是我对于代码覆盖率的看法。
PHPSpec是一个BDD框架。如果您在编写类之前描述了其行为,那么您就是在进行BDD。以这种方式编写代码,您的类的相关行为都将通过“测试”得到充分覆盖。
代码覆盖工具和度量标准对于旧代码(没有规格/测试的代码)非常有用。您可以使用此类工具尝试达到一个点,使您可以继续TDD,并受益于免受回归的保护。
总的来说,这种方法并不像首先描述行为(TDD)那样有效。单个方法可能足够简单,可以响应多项所需的行为。在进行TDD时,您会不断地进行重构和删除不需要的代码。最终您会拥有10个规格(测试),所有规格都命中相同的代码行,但都描述着不同所需的行为,这些规格对于理解代码都很有用。
“测试”一词的问题之一在于它让人们认为TDD是关于验证的。实际上,它是关于交流的。StoryBDD是利益相关者之间的交流,而SpecBDD是类之间的交流。简单,实时,适度的文档。
进行代码覆盖以确保您已经测试过您的代码是一种谬论,最多只是一个差劲的度量标准。不幸的是人们认为测试结构比测试行为更重要。这就是为什么BDD诞生的原因,它帮助重新将重点放回正确的轨道上。确保测试代码的某个部分是虚假的,因为该部分代码可以执行多项任务,如果进行了良好的重构,则应该如此。此外,您最终会测试访问器、修饰符和构造函数等内容。
但是我很乐意听取社区的看法。我可以看到代码覆盖率可能会有用。另外,由于Sebastian Bergmann很好地将其模块化出PHPUnit,我可以在PHPSpec中重复使用它。我更喜欢您首先编写规格。您将免费获得您相关行为的100%代码覆盖。在我看来,这才是最重要的事情。
使用Code Coverage extension to PHPSpec生成clover。
如果您想要合并来自PHPSpec和其他工具(例如PHPUnit)的覆盖数据,则可以使用PHP_CodeCoverage输出格式,并在合并模式下使用phpcov工具。
示例:
# phpspec.yml
extensions:
- PhpSpec\Extension\CodeCoverageExtension
code_coverage:
output: /tmp/coverage/phpspec.phpcoverage
format: php
# phpunit.xml
<logging>
<log type="coverage-php" target="/tmp/coverage/phpunit.phpcoverage" />
</logging>
# from the command line
phpcov merge --clover coverage.xml /tmp/coverage
这将为您提供两个工具的覆盖率,最终以适合像Jenkins的Clover格式呈现。
我认为一个代码覆盖率生成器对于正在接受BDD样式测试过程的遗留系统非常有用,因为你可以知道哪些代码没有被测试。我个人会很感激PHPSpec能够提供这样的功能。