如何排除某些测试的代码覆盖率
How can I exclude code coverage for certain tests
我正在为我的 PHP 单元测试收集代码覆盖率数据;有些是单元测试,有些是集成测试,检查所有内容(classes 和配置)是否正确连接。
我只想在 运行 进行单元测试时收集代码覆盖率信息,因为应该显示单元测试以覆盖目标中的所有行 class(es) (理想情况下使用 @covers
注释)。集成测试不应显示为覆盖任何内容,但 phpunit 的默认位置似乎是,如果它没有任何 @covers
注释,那么它应该覆盖直接或由每个测试方法间接调用。
请注意,在 phpunit.xml
中使用 <whitelist>
对我没有帮助,因为某些文件可能会被两组测试触及 - 我想记录源自一组的代码覆盖率,同时排除另一个。
我想过几种可能的方法,但 none 对我来说 'clean':
- 向测试 class' 文档块添加错误的
@covers
声明
This works, but as stated, adding a dummy @covers
like: /** @covers \stdClass */
feels so, so dirty.
在每个测试方法的主体周围添加codeCoverageIgnoreStart
/End
注释(我不知道这是否有效)
Similarly to below, this only seems to exclude the lines of code wrapped, not any lines of code called thereupon
将 codeCoverageIgnore
注释添加到测试 class(我怀疑这不会起作用,因为只是从覆盖集合中排除了 class 中的代码,但恢复任何相关代码的收集)
Tested this, as suspected this just has the semantics that no lines within the test class should be considered covered
- 将它们分成单独的套件,为一个而不是另一个收集代码覆盖率。 (理想情况下,所有测试都应在一个 运行 中执行)
是否有比上述任何可能性更简洁的方法?
到目前为止我发现的最干净的感觉方法是上面概述的第一种方法的变体:在 @covers
注释中将 class 引用到自身:
<?php
namespace FooTestSuite;
/** @covers \FooTestSuite\BarTest */
class BarTest extends \PHPUnit_Framework_TestCase {
/* ... */
}
我正在为我的 PHP 单元测试收集代码覆盖率数据;有些是单元测试,有些是集成测试,检查所有内容(classes 和配置)是否正确连接。
我只想在 运行 进行单元测试时收集代码覆盖率信息,因为应该显示单元测试以覆盖目标中的所有行 class(es) (理想情况下使用 @covers
注释)。集成测试不应显示为覆盖任何内容,但 phpunit 的默认位置似乎是,如果它没有任何 @covers
注释,那么它应该覆盖直接或由每个测试方法间接调用。
请注意,在 phpunit.xml
中使用 <whitelist>
对我没有帮助,因为某些文件可能会被两组测试触及 - 我想记录源自一组的代码覆盖率,同时排除另一个。
我想过几种可能的方法,但 none 对我来说 'clean':
- 向测试 class' 文档块添加错误的
@covers
声明This works, but as stated, adding a dummy
@covers
like:/** @covers \stdClass */
feels so, so dirty. 在每个测试方法的主体周围添加codeCoverageIgnoreStart
/End
注释(我不知道这是否有效)Similarly to below, this only seems to exclude the lines of code wrapped, not any lines of code called thereupon
将codeCoverageIgnore
注释添加到测试 class(我怀疑这不会起作用,因为只是从覆盖集合中排除了 class 中的代码,但恢复任何相关代码的收集)Tested this, as suspected this just has the semantics that no lines within the test class should be considered covered
- 将它们分成单独的套件,为一个而不是另一个收集代码覆盖率。 (理想情况下,所有测试都应在一个 运行 中执行)
是否有比上述任何可能性更简洁的方法?
到目前为止我发现的最干净的感觉方法是上面概述的第一种方法的变体:在 @covers
注释中将 class 引用到自身:
<?php
namespace FooTestSuite;
/** @covers \FooTestSuite\BarTest */
class BarTest extends \PHPUnit_Framework_TestCase {
/* ... */
}