2012-08-02 152 views
14

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

我想过xdebug,但据我所知它不能生成jenkins的报告。

回答

38

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

PHPSpec是一个BDD框架。如果你在做BDD,你会在写课程之前描述你的班级的行为。如果你这样做了,你的班级的相关行为都将被“测试”所覆盖。

代码覆盖率工具和指标对遗留代码(不带规格/测试编写的代码)很有用。您可以使用这样的工具来尝试并达到可以继续TDD的程度,并且可以保护其免于回归。

通常,这种方法不像真的与描述行为优先(TDD)一样有效。单一的方法可能很简单,可以响应多个所需的行为。你知道,当你TDDing时,你在这个过程中不断重构,删除不需要的代码。最终有10个规范(测试)达到了相同的代码行,全都描述了不同的需要的行为,所有这些都有助于理解代码。

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

已完成代码覆盖以确保您已测试您的代码是一种谬误,最差的指标是糟糕的。不幸的是,人们认为测试结构比测试行为更重要。这就是为什么BDD诞生了,以帮助重点恢复正确的轨道。确保代码的这部分被测试是假的,因为那部分代码可以做多件事情,它应该,如果它被很好地重构。您也将最终测试像访问器和修饰符和构造函数等东西。

但我很乐意听到关于此的社区。我可以看到Code Coverage的用处。另外,因为Sebastian Bergmann很好地模块化了PHPUnit,所以我可以在PHPSpec中重新使用它。我宁愿你先写你的规格。您可以免费获得100%的相关行为代码覆盖率。在我看来,这是最重要的。

+1

因为更多exprerienced你的问题对我来说很有价值。我开始将BDD并入我的团队,这就是为什么我非常在意这样做并收集有用的统计信息:) – spamec 2012-08-05 14:01:04

+0

对于新项目来说这是一个很好的方法,但如果我们想要在现有的旧项目中实现BDD,那又如何呢?你有没有这方面的经验?为现有代码编写Spec是否有意义?在我看来,对于旧的代码应该有新的规格的单元测试。 – 2013-05-22 10:50:13

+1

很好的答案Marcello。尽管如此,代码覆盖率仍然让人放心,它缺乏信心:) – 2013-07-27 10:09:03

6

我认为代码覆盖生成器对于正在进行BDD样式测试的旧系统是有用的,因为您将能够分辨哪些代码未经过测试。我会感谢PHPSpec中的这样一个功能。

8

使用Code Coverage extension to 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