編寫自定義斷言

2018-02-24 15:42 更新

編寫自定義斷言

編寫自定義斷言時(shí),最佳實(shí)踐是遵循 PHPUnit 自有斷言的實(shí)現(xiàn)方式。正如 Example?14.1, “PHPUnit_Framework_Assert 類的 assertTrue() 與 isTrue() 方法”中所示,assertTrue() 方法只是對 isTrue()assertThat() 方法的外包覆:isTrue() 創(chuàng)建了一個(gè)匹配器對象,將其傳遞給 assertThat() 進(jìn)行評定。

Example?14.1.?PHPUnit_Framework_Assert 類的 assertTrue() 與 isTrue() 方法

<?php
abstract class PHPUnit_Framework_Assert
{
    // ...

    /**
     * 斷言某個(gè)條件為真。
     *
     * @param  boolean $condition
     * @param  string  $message
     * @throws PHPUnit_Framework_AssertionFailedError
     */
    public static function assertTrue($condition, $message = '')
    {
        self::assertThat($condition, self::isTrue(), $message);
    }

    // ...

    /**
     * 返回一個(gè) 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 是如何擴(kuò)展針對匹配器對象(或約束)的抽象基類 PHPUnit_Framework_Constraint 的。

Example?14.2.?PHPUnit_Framework_Constraint_IsTrue 類

<?php
class PHPUnit_Framework_Constraint_IsTrue extends PHPUnit_Framework_Constraint
{
    /**
     * 對參數(shù) $other 進(jìn)行約束評定。如果符合約束,
     * 返回 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';
    }
}?>

在實(shí)現(xiàn) assertTrue()isTrue() 方法及 PHPUnit_Framework_Constraint_IsTrue 類時(shí)所付出的努力帶來了一些好處,assertThat() 能夠自動負(fù)責(zé)起斷言的評定與任務(wù)簿記(例如為了統(tǒng)計(jì)目的而對其進(jìn)行計(jì)數(shù))工作。此外, isTrue() 方法還可以在配置仿件對象時(shí)用來作為匹配器。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號