PHPUnitManual:19.2

From 흡혈양파의 번역工房
Jump to: navigation, search
19.2 커스텀 검증 (custom assertions) 작성

커스텀 검증을 작성할 때는, PHPUnit 자체의 검증 구현을 따라하는 것이 좋습니다. 예19.1 "PHPUnit_Framework_Assert 클래스의 assertTrue() 및 isTrue() 메소드" 에 나와 있는 것처럼, assertTrue() 메소드는 isTrue() 와 assertThat() 메소드의 단순한 wrapper 입니다. isTrue() 가 matcher 오브젝트를 만들고, 이 오브젝트를assertThat() 가 평가합니다.


예19.1 PHPUnit_Framework_Assert 의 assertTrue() 와 isTrue() 메소드

<?php
abstract class PHPUnit_Framework_Assert
{
    // ...
 
    /**
     * Asserts that a condition is true.
     *
     * @param  boolean $condition
     * @param  string  $message
     * @throws PHPUnit_Framework_AssertionFailedError
     */
    public static function assertTrue($condition, $message = '')
    {
        self::assertThat($condition, self::isTrue(), $message);
    }
 
    // ...
 
    /**
     * Returns a PHPUnit_Framework_Constraint_IsTrue matcher object.
     *
     * @return PHPUnit_Framework_Constraint_IsTrue
     * @since  Method available since Release 3.3.0
     */
    public static function isTrue()
    {
        return new PHPUnit_Framework_Constraint_IsTrue;
    }
 
    // ...
}?>


예19.2 "PHPUnit_Framework_Constraint_IsTrue 클래스" 는, PHPUnit_Framework_Constraint_IsTrue가 matcher 오브젝트 (혹은 제약 (constraints)) 을 위해 추상 클래스 PHPUnit_Framework_Constraint 를 계승하는 예입니다.


예19.2 PHPUnit_Framework_Constraint_IsTrue 클래스

<?php
class PHPUnit_Framework_Constraint_IsTrue extends PHPUnit_Framework_Constraint
{
    /**
     * Evaluates the constraint for parameter $other. Returns TRUE if the
     * constraint is met, FALSE otherwise.
     *
     * @param mixed $other Value or object to evaluate.
     * @return bool
     */
    public function matches($other)
    {
        return $other === TRUE;
    }
 
    /**
     * Returns a string representation of the constraint.
     *
     * @return string
     */
    public function toString()
    {
        return 'is true';
    }
}?>


assertTrue() 와 isTrue() 메소드의 구현을 PHPUnit_Framework_Constraint_IsTrue 클래스와 같이 하여, 검증의 평가나 태스크의 기록 (테스트의 통계 정보를 자동 갱신 등) 을 assertThat() 이 자동으로 해 줍니다. 또, mock 오브젝트를 설정하기 위한 matcher 에 isTrue() 메소드를 사용할 수 있게 됩니다.


Notes