编写自定义断言
编写自定义断言
编写自定义断言时,最佳实践是遵循 PHPUnit 自有断言的实现方式。正如 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 类”展示了 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()
方法还可以在配置仿件对象时用来作为匹配器。
更多建议: