如果 PHPUnit 断言失败则写入文件
Write file if PHPUnit assert failed
我正在使用 PHPUnit 测试使用 Imagick 生成的图像。
目前我将每个生成的图像写入一个文件,因此当断言失败时我可以看到它。断言后文件再次被删除。
这有效,但所有文件访问都在减慢测试速度 运行。如果断言失败,是否可以只将文件写入磁盘?
基于@Jakub Zalassuggestion to look at creating a Listener, I found out about the
onNotSuccessfulTest`,它允许您在测试失败时向测试添加要执行的操作。
class MyPHPUnit_Framework_TestCase extends PHPUnit_Framework_TestCase
{
private $failureFiles = [];
protected function writeFileOnFailure($filename, $content)
{
@unlink($filename);
$this->failureFiles[$filename] = $content;
}
/**
* @before
*/
public function forgetFailureFiles()
{
$this->failureFiles = [];
}
public function onNotSuccessfulTest(\Exception $e)
{
foreach ($this->failureFiles as $filename => $content) {
file_put_contents($filename, $content);
}
$this->failureFiles = [];
parent::onNotSuccessfulTest($e);
}
}
就继承这个,在assert语句之前调用$this->writeFileOnFailure($path, $content)
。其余的自动处理。如果您的测试方法中有更多断言但不再关心文件,您可以调用 $this->forgetFailureFiles()
,否则它会在每个新测试方法之前自动调用。
可能有更好的方法来处理这个问题(比如使用 Listener 或 Decorator),但这很容易实现并根据特定需求进行更改。
我正在使用 PHPUnit 测试使用 Imagick 生成的图像。
目前我将每个生成的图像写入一个文件,因此当断言失败时我可以看到它。断言后文件再次被删除。
这有效,但所有文件访问都在减慢测试速度 运行。如果断言失败,是否可以只将文件写入磁盘?
基于@Jakub Zalassuggestion to look at creating a Listener, I found out about the
onNotSuccessfulTest`,它允许您在测试失败时向测试添加要执行的操作。
class MyPHPUnit_Framework_TestCase extends PHPUnit_Framework_TestCase
{
private $failureFiles = [];
protected function writeFileOnFailure($filename, $content)
{
@unlink($filename);
$this->failureFiles[$filename] = $content;
}
/**
* @before
*/
public function forgetFailureFiles()
{
$this->failureFiles = [];
}
public function onNotSuccessfulTest(\Exception $e)
{
foreach ($this->failureFiles as $filename => $content) {
file_put_contents($filename, $content);
}
$this->failureFiles = [];
parent::onNotSuccessfulTest($e);
}
}
就继承这个,在assert语句之前调用$this->writeFileOnFailure($path, $content)
。其余的自动处理。如果您的测试方法中有更多断言但不再关心文件,您可以调用 $this->forgetFailureFiles()
,否则它会在每个新测试方法之前自动调用。
可能有更好的方法来处理这个问题(比如使用 Listener 或 Decorator),但这很容易实现并根据特定需求进行更改。