Php 如何排除某些测试的代码覆盖率

Php 如何排除某些测试的代码覆盖率,php,phpunit,code-coverage,Php,Phpunit,Code Coverage,我正在收集PHP单元测试的代码覆盖率数据;有些是单元测试,有些是集成测试,检查所有内容(类和配置)是否正确连接 我只希望在运行单元测试时收集代码覆盖率信息,因为单元测试应该覆盖目标类中的所有行(理想情况下使用@covers注释)。集成测试不应该覆盖任何内容,但phpunit的默认位置似乎是,如果它没有任何@covers注释,那么它应该覆盖每个测试方法直接或间接调用的每一行代码 请注意,在phpunit.xml中使用对我没有帮助,因为两组测试可能都会触及某些文件,我希望记录源自其中一组测试的代码覆

我正在收集PHP单元测试的代码覆盖率数据;有些是单元测试,有些是集成测试,检查所有内容(类和配置)是否正确连接

我只希望在运行单元测试时收集代码覆盖率信息,因为单元测试应该覆盖目标类中的所有行(理想情况下使用
@covers
注释)。集成测试不应该覆盖任何内容,但phpunit的默认位置似乎是,如果它没有任何
@covers
注释,那么它应该覆盖每个测试方法直接或间接调用的每一行代码

请注意,在
phpunit.xml
中使用
对我没有帮助,因为两组测试可能都会触及某些文件,我希望记录源自其中一组测试的代码覆盖率,同时排除另一组测试

我已经想到了几种可能的方法,但在我看来没有一种是“干净的”:

  • 向测试类的docblock添加一个false
    @cover
    声明 这是可行的,但是如上所述,添加一个虚拟的
    @covers
    ,比如:
    /***@covers\stdClass*/
    感觉非常脏

  • 在每个测试方法的主体周围添加
    codecoverageignoretart
    /
    End
    注释(我不知道这是否有效) 与下面类似,这似乎只排除包装好的代码行,而不排除随后调用的任何代码行

  • codeCoverageIgnore
    注释添加到测试类中(我怀疑这不会起作用,因为只是将类中的代码从覆盖率集合中排除,而是恢复任何依赖代码的集合) 对此进行了测试,正如所怀疑的那样,它只是具有这样一种语义,即测试类中的任何行都不应被视为包含在内

  • 将它们分离为单独的套件,其中一个套件收集代码覆盖率,而不是另一个套件。(理想情况下,所有测试应在一次运行中执行)

有没有比上述任何一种方法更干净的方法呢?

到目前为止,我发现的最干净的感觉方法是上述第一种方法的一种变体:在
@covers
注释中引用类本身:

<?php

namespace FooTestSuite;

/** @covers \FooTestSuite\BarTest */
class BarTest extends \PHPUnit_Framework_TestCase {

    /* ... */

}

到目前为止,我发现的最干净的感觉方法是上述第一种方法的变体:在
@covers
注释中引用类本身:

<?php

namespace FooTestSuite;

/** @covers \FooTestSuite\BarTest */
class BarTest extends \PHPUnit_Framework_TestCase {

    /* ... */

}