PHPUnit非常奇怪的结果

时间:2013-10-24 13:46:29

标签: phpunit equality

assertEquals()'0'进行比较时

false失败,但在将'1'true进行比较时通过

$this->assertEquals( '0', false ); // fails
$this->assertEquals( '1', true );  // passes

有人可以解释一下吗?

2 个答案:

答案 0 :(得分:0)

字符串不是假的,也不是真的。 PHPUnit完全相同,所以即使1不等于true。

PHPUnit在比较时使用===(三重等于)运算符,因此,只有TRUE === TRUE,而不是1.

答案 1 :(得分: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"