2013-09-05 4 views
8
)

저는 PHPUnit을보고 있는데 다음과 같은 점이 궁금합니다. PHPUnit이 int를 처리합니까? 1과 0은 부울로 나타 납니까? 현재 테스트 중입니다.PHPUnit가 진정한 것을 주장합니다. (

예 내 시험이 (는 preg_match로 실패) INT 1 또는 0을 반환하고 오류가있는 경우에만 거짓 BOOL 인에서 $this->assertTrue(preg_match('/asdf/', 'asdf'));

.

필자는 비교가 항상 bool을 반환하기 때문에 분명히 다음과 같은 작업을 수행합니다. $this->assertTrue(preg_match('/asdf/', 'asdf') === 1);

내 preg_match 또는 내 주장에 뭔가가 누락 되었습니까? 덜 엄격합니까?

편집 : assertTrue에 일치하는 유형이 필요합니까? 주장을 덜 엄격하게 만들 수있는 방법이 있습니까?

답변

17

PHP 별도 boolean 유형 TRUEFALSE (대소 문자 구분 정수)의 해당 값을 갖는다 (http://phpunit.de/manual/current/en/writing-tests-for-phpunit.html#writing-tests-for-phpunit.assertions.assertRegExp 참조)를 1과 0의 정수 값과 동일하지 않은 사용.

엄격한 비교 (===)를 사용하면 작동하지 않습니다 : TRUE !== 1FALSE !== 0. 당신은 타입 저글링을 사용하는 경우, TRUE는 1 FALSE로 변환됩니다

0으로 변환된다 (그리고, 그 반대 0 FALSE로 변환되고, 다른 정수 TRUE로 변환된다). 따라서 TRUE == 1FALSE == 0.

PHPUnit에서 assertTrueassertFalse은 유형에 따라 엄격하게 검사됩니다. assertTrue($x)TRUE === $x인지 확인하고 assertSame(TRUE, $x)과 같으며 assertEquals(TRUE, $x)과 같지 않습니다. 귀하의 경우에는

, 하나의 가능한 방법은 명시 적 유형 캐스팅 사용하는 것입니다 : 이것은 '아무튼

$this->assertRegExp('/asdf/', 'asdf'); 
3

사용 가능한 특정 테스트 기능이있는 경우 복잡한 함수 호출에 실제 논리가 포함 된 assertTrue 또는 assertFalse 수표를 사용하지 마십시오.

PHPUnit은 충족되지 않는 경우에 매우 도움이되는 매우 광범위한 주장을 가지고 있습니다. 그들은 당신에게 디버깅에 도움이되는 잘못된 점에 대한 많은 정보를 제공합니다.

는 정규식 확인 assertRegExp()

+0

그러나

$this->assertTrue((boolean)preg_match('/asdf/', 'asdf')); 

을 phpunit을 정규식에 대해 문자열을 확인하기 위해 헌신적 인 주장을 가지고 일 내 질문에 대답하지만, 확실히 가치있는 설명. 고맙습니다. – alairock

+2

'assertTrue'는 진짜 "true"값을 검사합니다. "truthy"는 "1"로 검사하지 않습니다. – Sven

+0

필자는 PHPUnit의'assertTrue'는 "triple-equal"비교를 수행하고 "double-equal"비교는하지 않는다고 이해합니다. ('var_dump (1 == true);'와'var_dump (1 === true);'첫 번째는 true로 돌아오고 두 번째는 false로 되돌아옵니다. "triple-equals"도 유형과 일치합니다. 질문. 원본을 구체적으로 편집합니다. – alairock