你如何在PHP中单元测试自定义异常处理程序?

时间:2015-04-20 21:23:53

标签: php phpunit

你会在php中测试自定义异常处理程序吗?例如,我有以下内容:

<?php

namespace Freya\Exceptions;

/**
 * Custom exception handler.
 *
 * Instantiate with:
 *
 * <pre>
 *  new Freya\Exceptions\ExceptionHandler();
 * </pre>
 *
 * This is a dependency in the Freya-Loader package and is instantiated for you in the constructor of the auto loader.
 *
 * @package Freya\Exceptions
 */
class ExceptionHandler {

    /**
     * Set up the exception handler.
     */
    public function __construct() {
        set_exception_handler(array($this, 'exceptionHandler'));
    }

    /**
     * Create the exception handler.
     *
     * Start with the message that was produced. Then provide a stack trace.
     */
    public function exceptionHandler($exception) {
        echo $exception->getMessage();
        echo '<br />';
        echo '<pre> ' . $exception->getTraceAsString() . ' </pre>';
    }
}

我想验证当抛出异常时,输出与exceptionHandler函数匹配。我真的不确定我是否应该测试这门课程。

想法吗

1 个答案:

答案 0 :(得分:3)

您可以通过抛出任意异常并手动验证输出来从技术上测试您的类。

通过将new Exception();传递给ExceptionHandler类并验证输出,可以对类进行自动化,可重复的测试。您可以通过调用$lastHandler = set_exception_handler(null);来验证构造函数,以验证它是否是最后一个自定义处理程序。

从这两个测试中,您可以放心,PHP已经完成了自己的单元测试,以确保set_exception_handler有效。