加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

如何在PHPUnit中覆盖异常类

发布时间:2020-12-13 16:17:41 所属栏目:PHP教程 来源:网络整理
导读:我的目标是非常高的代码覆盖率,并希望覆盖异常类或将它们排除在codecoverage报告之外. 示例代码 class My_DataException extends Exception{}class Foo{ function __construct() { throw new My_DataException('see?'); }} 如何在My_DataException(在library
我的目标是非常高的代码覆盖率,并希望覆盖异常类或将它们排除在codecoverage报告之外.

示例代码

class My_DataException extends Exception
{}

class Foo
{
   function __construct() { throw new My_DataException('see?'); }
}

如何在My_DataException(在library / My / DataException.php中)获取代码覆盖率,或者将文件排除在代码覆盖率报告中?我不想使用注释方法(@codeCoverageIgnore或类似的东西).

我的phpunit.xml定义了黑名单,没有白名单

<filter>
    <blacklist>
        <directory suffix="Exception.php">../library/</directory>
    </blacklist>
</filter>

每个Exception文件都将以“Exception.php”结尾,所以我不确定为什么后缀部分不起作用.

额外细节:

>这不是关于适当覆盖范围的问题
>我宁愿不在每个Exception文件中使用注释方法
>每个异常文件将以“Exception.php”结尾,例如. My / Exception.php或My / DataException.php

解决方法

对于以下代码:

class Foo
{
    function __construct() {
        throw new My_DataException('see?');
    }
}s

如果在测试中执行该行,您将获得代码覆盖:

new Foo;

对于这样的测试,您可以通过注释告诉Phpunit您期望哪个例外:

/**
 * @expectedException My_DataException
 */

但是异常通常是异常,因此您不会覆盖它们,但出于安全原因可能存在,但您还不知道如何使用test-setup / data / parameters触发它们.

然后更加努力思考并尝试触发它们.否则可能是代码是多余的,因为从技术上讲,你无法抛出异常,因此没有必要.

对于您知道它们可能发生的情况,但您仍然无法触发它们(可能吗?)您可以将脚本的某些区域标记为从源代码中的覆盖率报告中排除:

// @codeCoverageIgnoreStart
throw new My_DataException('see?');
// @codeCoverageIgnoreEnd

稀疏地使用它可能会在将来删除它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读