我的目标是获得非常高的代码覆盖率,并希望覆盖异常类或将它们排除在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”结尾,所以我不确定为什么后缀部分不起作用。
其他详情:
答案 0 :(得分:3)
以下代码:
class Foo
{
function __construct() {
throw new My_DataException('see?');
}
}s
如果在测试中执行该行,您将获得代码覆盖率:
new Foo;
对于这样的测试,您可以通过注释告诉Phpunit您期望哪个例外:
/**
* @expectedException My_DataException
*/
但是异常通常是异常,因此您不会覆盖它们,但出于安全原因可能存在例外情况,您还不知道如何使用测试设置/数据/参数触发它们。
然后更加努力并尝试触发它们。否则可能是代码是多余的,因为从技术上讲,你无法抛出异常,因此没有必要。
对于你知道它们可能会发生的情况,但是你仍然无法触发它们(这可能吗?)你可以将脚本的某些区域标记为从源代码中的覆盖率报告中排除:
// @codeCoverageIgnoreStart
throw new My_DataException('see?');
// @codeCoverageIgnoreEnd
稀疏地使用它可能会在将来删除它。
答案 1 :(得分:-1)
我正在寻找一种方法来覆盖实际的异常文件,这就是我最终偶然发现了答案:
<?php
/**
* Simple test for exception
*/
class Api_ExceptionTest extends PHPUnit_Framework_TestCase
{
/**
* Test can construct the exception, then throw it.
*
* @expectedException Api_Exception
*/
public function testThrowException()
{
$exception = new Api_Exception();
throw $exception;
}
}