如何在 php 中对自定义异常处理程序进行单元测试?

How do you unit test a custom exception handler in php?

您会在 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 函数的匹配。我真的不确定我是否应该测试这个 class.

想法?

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

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

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