PHPUnit有一些内置的递归数组比较函数吗?

Ben*_*nee 25 php recursion phpunit unit-testing multidimensional-array

我需要做的一些测试需要将已知数组与我将要运行的函数得到的结果进行比较.

用于递归地比较数组:

  • PHPUnit是否具有内置功能?
  • 这里有人有一些他们构建的代码可以共享吗?
  • 这将是我必须自己构建的东西吗?

Gut*_*ter 27

是的,它确实.assertEquals()assertNotEquals()文件.

特别:

的assertEquals()

assertEquals(mixed $expected, mixed $actual[, string $message = ''])
Run Code Online (Sandbox Code Playgroud)

报告由$message两个变量是否相等$expected而确定的错误$actual.

assertNotEquals() 是这个断言的反转,并采用相同的论点.

测试代码:

public function testArraysEqual() {
    $arr1 = array( 'hello' => 'a', 'goodbye' => 'b');
    $arr2 = array( 'hello' => 'a', 'goodbye' => 'b');

    $this->assertEquals($arr1, $arr2);
}

public function testArraysNotEqual() {
    $arr1 = array( 'hello' => 'a', 'goodbye' => 'b');
    $arr2 = array( 'hello' => 'b', 'goodbye' => 'a');

    $this->assertNotEquals($arr1, $arr2);
}
Run Code Online (Sandbox Code Playgroud)

[编辑]

以下是乱序列表的代码:

public function testArraysEqualReverse() {
    $arr1 = array( 'hello' => 'a', 'goodbye' => 'b');
    $arr2 = array( 'goodbye' => 'b', 'hello' => 'a');

    $this->assertEquals($arr1, $arr2);
}
Run Code Online (Sandbox Code Playgroud)

此测试失败:

public function testArraysOutOfOrderEqual() {
    $arr1 = array( 'a', 'b');
    $arr2 = array( 'b', 'a');

    $this->assertEquals($arr1, $arr2);
}
Run Code Online (Sandbox Code Playgroud)

有消息:

Failed asserting that 
Array
(
    [0] => b
    [1] => a
)
 is equal to 
Array
(
    [0] => a
    [1] => b
)
Run Code Online (Sandbox Code Playgroud)

  • 问题是关于递归比较。您的示例仅提供一维数组。所以问题悬而未决 - asserEqual() 是否支持 __multi-dimentional__ 数组比较?答案是肯定的。 (3认同)