我正在使用PHPUnit使用Imagick测试生成的图像。
目前我将每个生成的图像写入文件,因此当断言失败时我可以看到它。断言后,文件再次被删除。
这样可行,但所有文件访问都会减慢测试运行速度。如果断言失败,是否可以只将文件写入磁盘?
答案 0 :(得分:0)
基于@Jakub Zalas suggestion 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),但实现和更改以满足特定需求非常简单。