【问题标题】:Excluding a PHP Interface from PHPUnit code coverage从 PHPUnit 代码覆盖范围中排除 PHP 接口
【发布时间】:2011-06-02 21:50:46
【问题描述】:

我有一个 PHPUnit 测试,它测试了一个名为 HelpTokenizerTest 的类。此类实现 TokenizerInterface。由于某些奇怪的原因,我不能将 TokenizerInterface 从代码覆盖范围中排除。

尽管使用了@codeCoverageIgnore 甚至@codeCoverageIgnoreStart/End,但它在代码覆盖率报告中显示为未涵盖。

有什么想法吗?

我不希望该接口包含在我的测试范围中,因为它什么都不做。测试接口有什么意义。

【问题讨论】:

  • 您使用的是配置 xml 还是测试套件?

标签: php unit-testing phpunit


【解决方案1】:

使用 phpunit.xml 时,您可以设置过滤器以排除具有特定名称、特定文件夹或具有特定扩展名的文件。

the documentation for it

示例:

<testsuite name="Application Test Suite">
    <directory>./application/</directory>
</testsuite>

<filter>
    <blacklist>
        HERE
    </blacklist>
       or alternatively
    <whitelist>
        <directory suffix=".php">../library/</directory>
        <directory suffix=".php">../application/</directory>
        <exclude>
            AND HERE
            <directory suffix=".phtml">../application/</directory>
        </exclude>
    </whitelist>
</filter>

【讨论】:

  • 请注意,如果您定义白名单,PHPUnit 将忽略黑名单,因此您必须在白名单中使用&lt;exclude&gt; 块,如上所示。
  • 这就是我最终要做的。谢谢塞缪尔和大卫!
【解决方案2】:

您可以在文件开头使用 @codeCoverageIgnore 作为注释以获得 100% 0/0 覆盖率。

<?php // @codeCoverageIgnoreStart 
interface MyInterface
{
    public function myfunction();
}

请注意,它在评论块中不起作用。

问题在 PHPUnit 的 github 上打开:https://github.com/sebastianbergmann/phpunit/issues/497

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-27
    • 1970-01-01
    • 2021-02-12
    • 1970-01-01
    • 1970-01-01
    • 2016-03-21
    • 2016-03-29
    • 2015-04-27
    相关资源
    最近更新 更多