如果PHPUnit断言失败,则写入文件

时间:2016-04-04 22:02:02

标签: php phpunit

我正在使用PHPUnit使用Imagick测试生成的图像。

目前我将每个生成的图像写入文件,因此当断言失败时我可以看到它。断言后,文件再次被删除。

这样可行,但所有文件访问都会减慢测试运行速度。如果断言失败,是否可以只将文件写入磁盘?

1 个答案:

答案 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),但实现和更改以满足特定需求非常简单。

相关问题