2013-10-24 46 views

回答

0

一个字符串不是假的,也不是真的。 PHPUnit完全平等,所以即使1也不相等。

PHPUnit的使用===(三重等于)操作者上的比较,因此,因此,只有TRUE TRUE ===,而不是1。

+0

为什么第二个'assertEquals()'通过? –

+0

记住变量的顺序。 '1'是预期的结果。 '1'是一个字符串。你正在评估一个TRUE是一个字符串。这是通过@STLMikey在下面的答案。 –

0

PHPUnit的具有非常复杂的断言系统。对于这种情况会有用PHPUnit_Framework_Comparator_Scalar类,它有这样的代码:

public function assertEquals($expected, $actual, $delta = 0, $canonicalize = FALSE, $ignoreCase = FALSE) 
{ 
    $expectedToCompare = $expected; 
    $actualToCompare = $actual; 

    // always compare as strings to avoid strange behaviour 
    // otherwise 0 == 'Foobar' 
    if (is_string($expected) || is_string($actual)) { 
     $expectedToCompare = (string)$expectedToCompare; 
     $actualToCompare = (string)$actualToCompare; 
    // omitted 
    } 

    if ($expectedToCompare != $actualToCompare) { 

     throw new PHPUnit_Framework_ComparisonFailure(
     // omitted 
     ); 
    } 
} 

如果值中的一个是串它们都转换成字符串。

var_dump((string)false); // string(0) "" 
var_dump((string)true); // string(1) "1"