2 回答
TA贡献1847条经验 获得超7个赞
我不确定这是否是最佳选择,但您可以实现测试结果打印机,例如:
<?php
namespace Tests;
use PHPUnit\TextUI\ResultPrinter;
class TestPrinter extends ResultPrinter
{
protected function printDefect(\PHPUnit\Framework\TestFailure $defect, $count)
{
$this->printDefectHeader($defect, $count);
$ex = $defect->thrownException();
// you can do whatever you need here,
// like check exception type, etc,
// printing just line number here
$this->write('Line #' . $ex->getLine() . "\n");
$this->printDefectTrace($defect);
}
}
并注册为要使用的打印机(假设使用 xml 配置,但也可以通过命令行完成):
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.1/phpunit.xsd"
backupGlobals="false"
colors="true"
bootstrap="vendor/autoload.php"
printerClass="Tests\TestPrinter"
>
<!-- note printerClass attribute above -->
</phpunit>
这样做,您将获得与以下内容相似的输出:
There was 1 error:
1) Tests\SomeTest::testStuff
Line #16
LogicException: whatever
(我只是做了一个简单的测试throw new \LogicException('whatever');)
TA贡献1798条经验 获得超3个赞
因此,如果您需要在每次运行测试时打印这些数据,而不是在生产时打印,那么为什么不扩展基本 Exception 类并检查您是否处于测试环境中,然后连接消息和数据。然后你所有的自定义异常来扩展这个新的 Exception 类。
class BaseException extends Exception {
public function __construct($message = '', $data = null, $code = 0) {
if (env('ENVIRONMENT') === 'test') {
$message .= ' ' . json_encode($data);
}
paret::__construct($message, $code);
}
}
但是此实现将需要更改您的 MyException 类以使用此数据调用父构造函数。
而不是这个
paret::__construct($message, $code);
现在你将拥有这个
paret::__construct($message, $data, $code);
并且还将新BaseException类扩展到您希望具有此功能的这些异常
- 2 回答
- 0 关注
- 132 浏览
添加回答
举报