PHPSpec和覆盖率报告

时间:2012-08-02 18:45:04

标签: php continuous-integration jenkins code-coverage phpspec

有没有人知道从PHPSpec测试生成覆盖率报告的方法?

我想过xdebug,但据我所知,它无法为jenkins生成报告。

3 个答案:

答案 0 :(得分:39)

目前(1.4.0)它还不支持代码覆盖率。很高兴听到您对此的反馈。以下是我对代码覆盖率的看法。

PHPSpec是一个BDD框架。如果您正在进行BDD,您可以在编写课程之前描述课程的行为。如果你这样做,你的课程的相关行为都将被“测试”正确地覆盖。

代码覆盖率工具和指标对遗留代码很有用(您编写的代码没有specs / tests)。您可以使用这样的工具尝试并开始使用TDD并保护其免受回归。

一般来说,该方法确实与描述行为优先(TDD)一样有效。单个方法可能足够简单,可以响应多个必需行为。您知道,当您进行TDDing时,您会在此过程中继续重构,删除不需要的代码。你最终得到了10个规范(测试),这些规范命中了相同的代码行,所有代码都描述了不同的行为,这对于理解代码都很有用。

“测试”一词的一个问题是它让人们认为TDD是关于验证的。不是。这是关于沟通。 StoryBDD是利益相关者之间的沟通,SpecBDD是类之间的沟通。简单,生活,足够的文档。

为确保您测试代码而进行的代码覆盖是一个谬误,最好是一个糟糕的指标。不幸的是,人们认为测试结构比测试行为更重要。这就是BDD诞生的原因,以帮助将重点放在正确的轨道上。确保测试这部分代码是假的,因为代码的那部分可以做多个事情,如果它被很好地重构了它应该。此外,您最终将测试访问器,修饰符和构造函数等内容。

但我很乐意听取社区的意见。我可以看到代码覆盖率可能有用。此外,由于Sebastian Bergmann很好地将其从PHPUnit中模块化,我可以在PHPSpec中重复使用它。我希望你先写下你的规格。您可以免费获得相关行为的100%代码覆盖率。在我看来,这是最重要的。

答案 1 :(得分:8)

使用Code Coverage extension to PHPSpec生成三叶草。

如果您想合并PHPSpec和其他工具(例如)PHPUnit的覆盖数据,请在合并模式下使用带有phpcov工具的PHP_CodeCoverage输出格式。

示例:

# 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的内容。

答案 2 :(得分:6)

我认为代码覆盖生成器对于正在进行BDD样式测试的遗留系统非常有用,因为您将能够判断哪些代码未经过测试。我很欣赏PHPSpec中的这样一个功能。