1
assertEquals()
失败,但经过PHPUnit的非常奇怪的结果
$this->assertEquals('0', false); // fails
$this->assertEquals('1', true); // passes
有人能解释一下吗?
assertEquals()
失败,但经过PHPUnit的非常奇怪的结果
$this->assertEquals('0', false); // fails
$this->assertEquals('1', true); // passes
有人能解释一下吗?
一个字符串不是假的,也不是真的。 PHPUnit完全平等,所以即使1也不相等。
PHPUnit的使用===(三重等于)操作者上的比较,因此,因此,只有TRUE TRUE ===,而不是1。
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"
为什么第二个'assertEquals()'通过? –
记住变量的顺序。 '1'是预期的结果。 '1'是一个字符串。你正在评估一个TRUE是一个字符串。这是通过@STLMikey在下面的答案。 –