10. 扩展 PHPUnit

    将自定义的断言和工具方法写在 的一个抽象子类中,然后从这个抽象子类派生你的测试用例类。这是扩展 PHPUnit 的最容易的方法。

    编写自定义断言时,最佳实践是遵循 PHPUnit 自有断言的实现方式。正如 中所示,assertTrue() 方法只是对 isTrue()assertThat() 方法的封装:isTrue() 创建了一个匹配器对象,将其传递给 assertThat() 进行评定。

    示例 10.1 PHPUnit\Framework\Assert 类的 assertTrue() 和 isTrue() 方法

    示例 10.2 展示了 PHPUnit\Framework\Constraint\IsTrue 是如何扩展针对匹配器对象(或约束)的抽象基类 PHPUnit\Framework\Constraint 的。

    示例 10.2 PHPUnit\FrameworkConstraint\IsTrue 类

    PHPUnit 的测试执行器可以通过注册实现了一个或多个以下接口的对象来进行扩展:

    • AfterLastTestHook
    • AfterRiskyTestHook
    • AfterSkippedTestHook
    • AfterSuccessfulTestHook
    • AfterTestFailureHook
    • AfterTestWarningHook
    • AfterTestHook
    • BeforeFirstTestHook

    每个“hook”(表示上面列出的各个接口)都代表一个可能在测试执行过程中发生的事件。

    有关如何在 PHPUnit 的 XML 配置中注册扩展的详细信息,参见 。

    示例 10.3 展示了一个实现了 BeforeFirstTestHookAfterLastTestHook 的扩展:

    示例 10.3 测试执行器扩展示例

    展示了如何通过为扩展类添加 __constructor() 定义让扩展可配置:

    示例 10.4 带有构造函数的测试执行器扩展

    要通过 XML 给扩展输入配置,必须更新 XML 配置文件的 段来让其拥有配置值,如示例 10.5 中所示:

    示例 10.5 测试执行器扩展配置

    有关如何使用 arguments 配置的详细信息,参见 。