2010-05-30 53 views

回答

19

是的。 assertEquals() and 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); 
} 

[編輯]

這裏是無序aLists的代碼:

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 
) 
+1

這是需要比較的陣列位於完全相同關鍵的相同順序鍵的功能? – 2010-05-30 02:14:59

+0

有趣的問題... – Gutzofter 2010-05-30 03:04:34

+0

所以,如果我想測試一個無序陣列對已知的好,我將不得不確保密鑰匹配,但這是唯一的警告?謝謝您的幫助! – 2010-05-30 12:49:46

3

@wilmoore

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

將失敗。

@Ben Dauphinee

這可能是值得考慮的assertContains(mixed $needle, array $haystack)但你會通過兩個陣列具有循環,每個元素與其他數組進行比較,以確保它包含所有必需的元素,沒有其他人,然而,這止跌對於含有兩個相同的元件

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

「的陣列噸帳戶將通過在這種情況下

它也沒有考慮任何進一步的遞歸這可能將是非常complica應對。

根據複雜性,從長遠來看,實現自己的斷言功能可能會更容易。

+0

的確,'array_values'技術將無法工作。這是幾年前我發佈的,所以我不完全記得爲什麼這樣說。 – 2013-12-16 22:45:16

1

我有這個問題與一些生成的數組與鍵 - 我最終通過期望的數組和通過ksort測試數組傳遞之前調用assertEquals。儘管如此,這對遞歸數組不起作用。

$expectedArray = array('foo' => 1, 'bar' => 0); 
$array = array('bar' => 0, 'foo' => 1); 

ksort($expectedArray); 
ksort($array); 

var_dump($expectedArray); // outputs array('bar' => 0, 'foo' => 1); 
var_dump($array); // outputs array('bar' => 0, 'foo' => 1); 

$this->assertEquals($expectedArray, $array); // passes 
1

assertEqual方法頭部看起來像這樣:

public static function assertEquals($expected, $actual, $message = '', $delta = 0, $maxDepth = 10, $canonicalize = FALSE, $ignoreCase = FALSE) 

如果。規範化參數被設置爲真陣列將通過sort()運行第一,這是可用的,如果鍵是任意的,並且僅價值很重要。

但是,在查看數組比較器代碼後,assertEqual實際上並不關心相關數組的順序:)它只會在結果數組中查找期望的鍵,然後比較這些鍵的值。

-1

有時我會做這樣的:

$arrayResult = [....]; 
$arrayExpected = [....]; 

ksort($arrayResult); // or sort() for associative arrays 
ksort($arrayExpected); 

self::assertSame($arrayExpected, $arrayResult);