PHPUnitManual:19.2
Jump to navigation
Jump to 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() 메소드를 사용할 수 있게 됩니다.