2013-09-05 7 views
8

私はPHPUnitを見ています。 PHPUnitがintを処理するかどうかを指定します。 1と0はブール値ですか?私の現在のテストでは、それはしません。PHPUnitアサートTrue One(1)

例:私の(するpreg_matchとして、これに失敗したテストで$this->assertTrue(preg_match('/asdf/', 'asdf'));

)はint型1または0を返すだけでエラーが発生した場合はfalse BOOLされます。

比較は常にboolを返すので、明らかに次のような作業を行います。 $this->assertTrue(preg_match('/asdf/', 'asdf') === 1);

私は私のpreg_match、またはそれを作るための私の主張に何かを見逃しています....

EDIT: assertTrueに一致する型が必要ですか?アサーションをあまり厳しくしない方法はありますか?

答えて

17

PHPはTRUEFALSE(大文字と小文字を区別しない定数)のその値が1と0の値を整数に同一ではない、別booleanタイプを有しています。

厳密な比較(===)を使用すると、動作しません:TRUE !== 1およびFALSE !== 0。もしタイプジャグリングを使用する場合、TRUE 1及びFALSEに変換さ

が0に変換され(および、その逆に、0 FALSEに変換され、任意の他の整数がTRUEに変換されます)。したがって、TRUE == 1およびFALSE == 0

PHPUnitでは、assertTrueassertFalseはタイプ依存の厳密なチェックです。 assertTrue($x)は、TRUE === $xかどうかをチェックします。assertSame(TRUE, $x)と同じで、assertEquals(TRUE, $x)と同じではありません。あなたのケースでは

、一つの可能​​なアプローチは、明示的な型キャストを使用することです:これは「doesnの

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

具体的なテスト機能がある場合は、複雑な関数呼び出しに実際のロジックが埋め込まれたassertTrueまたはassertFalseのチェックを使用しないでください。

PHPUnitは非常に膨大な数のアサーションを持っており、それらが満たされていない場合に本当に役立ちます。彼らはあなたに何がうまくいかなかったかのコンテキストを与え、デバッグに役立ちます。

assertRegExp()を使用し、正規表現をチェックする(http://phpunit.de/manual/current/en/writing-tests-for-phpunit.html#writing-tests-for-phpunit.assertions.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);'を参照してください。質問。私はオリジナルを特定のものに編集します。 – alairock

関連する問題