14

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

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

4

3 回答 3

38

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

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

代码覆盖率工具和指标对于遗留代码(您编写的代码没有规范/测试)很有用。您可以使用这样的工具来尝试达到可以继续 TDD 并获得免受回归保护的好处的程度。

一般来说,这种方法并不首先描述行为 (TDD) 那样有效。一种方法可能足够简单,可以响应多个所需的行为。您知道,当您进行 TDD 时,您会在过程中不断进行重构,删除不需要的代码。你最终会得到 10 个规范(测试),它们都在相同的代码行中,都描述了不同的所需行为,所有这些都有助于理解代码。

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

为保证您已经测试过代码而进行的代码覆盖是一种谬误,充其量是一个糟糕的指标。不幸的是,人们认为测试结构比测试行为更重要。这就是为什么 BDD 应运而生,以帮助将焦点重新回到正确的轨道上。确保这部分代码经过测试是假的,因为这部分代码可以做不止一件事,如果它被很好地重构的话,它应该做的。此外,您最终将测试访问器、修饰符和构造函数等内容。

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

于 2012-08-03T10:31:01.110 回答
9

使用PHPSpec 的代码覆盖率扩展来生成三叶草。

如果您想合并来自 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 之类的。

于 2014-05-26T19:06:30.947 回答
6

我认为代码覆盖生成器对于正在进行 BDD 样式测试的遗留系统很有用,因为您将能够分辨出哪些代码没有经过测试。我会欣赏 PHPSpec 中的这样一个特性。

于 2012-08-06T22:58:12.897 回答