PHPUnit是否有一些内置的递归数组比较函数?assertEquals()

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

对于递归比较数组:

  • PHPUnit是否有内置函数?
  • 这里是否有人有一些他们构建的代码来分享?
  • 这是我必须自己构建的东西吗?

答案 1

是的,确实如此。assertEquals()assertNotEquals() documentation.

具体说来:

assertEquals()

assertEquals(mixed $expected, mixed $actual[, string $message = ''])

报告由 两个变量和不相等所标识的错误。$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);
}

[编辑]

以下是无序列表的代码:

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

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

此测试失败:

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

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

留言内容:

Failed asserting that 
Array
(
    [0] => b
    [1] => a
)
 is equal to 
Array
(
    [0] => a
    [1] => b
)

答案 2

@wilmoore

$array1 = array('hi','hi2');
$array2 = array('hi2','hi');
$this->assertEquals(array_values($array1), array_values($array2));

将失败。

@Ben王妃

它可能值得一看,但您必须遍历两个数组并将每个元素与另一个数组进行比较,以确保它包含所有必需的元素而不是其他元素,但是这不会考虑包含两个相同元素的数组assertContains(mixed $needle, array $haystack)

$array1 = array('hi','hi2','hi');
$array2 = array('hi2','hi');

在这种情况下会通过

它也没有考虑任何进一步的递归,这可能非常复杂。

从长远来看,根据复杂性,实现自己的断言函数可能更容易。


推荐