编写自定义断言

最后更新于:2022-04-01 03:46:49

# 编写自定义断言 编写自定义断言时,最佳实践是遵循 PHPUnit 自有断言的实现方式。正如 [Example 14.1, “PHPUnit_Framework_Assert 类的 assertTrue() 与 isTrue() 方法”](# "Example 14.1. PHPUnit_Framework_Assert 类的 assertTrue() 与 isTrue() 方法")中所示,`assertTrue()` 方法只是对 `isTrue()` 和 `assertThat()` 方法的外包覆:`isTrue()` 创建了一个匹配器对象,将其传递给 `assertThat()` 进行评定。 **Example 14.1. PHPUnit_Framework_Assert 类的 assertTrue() 与 isTrue() 方法** ~~~ <?php abstract class PHPUnit_Framework_Assert { // ... /** * 断言某个条件为真。 * * @param boolean $condition * @param string $message * @throws PHPUnit_Framework_AssertionFailedError */ public static function assertTrue($condition, $message = '') { self::assertThat($condition, self::isTrue(), $message); } // ... /** * 返回一个 PHPUnit_Framework_Constraint_IsTrue 匹配器对象 * * @return PHPUnit_Framework_Constraint_IsTrue * @since Method available since Release 3.3.0 */ public static function isTrue() { return new PHPUnit_Framework_Constraint_IsTrue; } // ... }?> ~~~ [Example 14.2, “PHPUnit_Framework_Constraint_IsTrue 类”](# "Example 14.2. PHPUnit_Framework_Constraint_IsTrue 类")展示了 `PHPUnit_Framework_Constraint_IsTrue` 是如何扩展针对匹配器对象(或约束)的抽象基类 `PHPUnit_Framework_Constraint` 的。 **Example 14.2. PHPUnit_Framework_Constraint_IsTrue 类** ~~~ <?php class PHPUnit_Framework_Constraint_IsTrue extends PHPUnit_Framework_Constraint { /** * 对参数 $other 进行约束评定。如果符合约束, * 返回 TRUE,否则返回 FALSE。 * * @param mixed $other Value or object to evaluate. * @return bool */ public function matches($other) { return $other === TRUE; } /** * 返回代表此约束的字符串。 * * @return string */ public function toString() { return 'is true'; } }?> ~~~ 在实现 `assertTrue()` 和 `isTrue()` 方法及 `PHPUnit_Framework_Constraint_IsTrue` 类时所付出的努力带来了一些好处,`assertThat()` 能够自动负责起断言的评定与任务簿记(例如为了统计目的而对其进行计数)工作。此外, `isTrue()` 方法还可以在配置仿件对象时用来作为匹配器。
';