PHPUnitManual:19.2

From 흡혈양파의 번역工房
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
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