phpunit无法断言两个数组相等,但没有显示出差异

ley*_*you 7 php phpunit

这是phpunit说的:

1) Asgard\Entity\Tests\EntityTest::testToArray
Failed asserting that two arrays are equal.
--- Expected
+++ Actual
@@ @@
 Array (
     'id' => null
     'title' => 'Test Title'
     'content' => 'Test Content'
     'published' => 2015-03-04T11:19:50+0000
     'comments' => Array (
         0 => Array (
             'id' => null
             'content' => 'foo'
             'published' => 2015-03-04T11:19:50+0000
             'another_property' => null
             'news' => null
         )
         1 => Array (
             'id' => null
             'content' => 'bar'
             'published' => 2015-03-04T11:19:50+0000
             'another_property' => null
             'news' => null
         )
         2 => Array (
             'id' => null
             'content' => 'baz'
             'published' => 2015-03-04T11:19:50+0000
             'another_property' => null
             'news' => null
         )
     )
     'another_property' => null
 )
Run Code Online (Sandbox Code Playgroud)

https://travis-ci.org/asgardphp/asgard/jobs/53029084

"预期"和"实际"之间没有区别.测试通常会通过,但有时会失败.

ley*_*you 5

发现问题。元素的顺序不同。虽然输出没有显示,但有点烦人。

我已将 assertEquals 替换为:

$this->assertTrue($this->similar_arrays($arr1, $arr2));

protected function similar_arrays($a, $b) {
    if(is_array($a) && is_array($b)) {
        if(count(array_diff(array_keys($a), array_keys($b))) > 0)
            return false;

        foreach($a as $k => $v) {
            if(!$this->similar_arrays($v, $b[$k]))
                return false;
        }

        return true;
    }
    else
        return $a === $b;
}
Run Code Online (Sandbox Code Playgroud)