🦁

PHPUnit で配列を比較するパターン3種

2021/07/06に公開

PHPUnit にて比較で使う3つのメソッド、

  • assertSame()
  • assertEquals()
  • assertEqualsCanonicalizing() ※PHPUnit v7.5 以降

で配列を比較する場合の使い分けをまとめました。

比較する配列

比較元(これと同じかどうかを見る)

$actual = [
    0 => 'foo',
    1 => 'bar',
];

比較対象

1. キーも並び順も同値の配列

$arr1 = [
    0 => 'foo',
    1 => 'bar',
];

2. キーは同値だが並び順が異なる配列

$arr2 = [
    1 => 'bar',
    0 => 'foo',
];

3. キーも並び順も異なる配列

$arr3 = [
    'hoge' => 'bar',
    'fuga' => 'foo',
];

assertSame() 値、キーおよび並び順が同値であることを検証

// OK キーも並び順も同値の配列
$this->assertSame($arr1, $actual);

// NG キーは同値だが並び順が異なる配列
$this->assertSame($arr2, $actual);
// NG キーも並び順も異なる配列
$this->assertSame($arr3, $actual);

assertEquals() 値およびキーが同値であることを検証(並び順は不問)

// OK キーも並び順も同値の配列
$this->assertEquals($arr1, $actual);
// OK キーは同値だが並び順が異なる配列
$this->assertEquals($arr2, $actual);

// NG キーも並び順も異なる配列
$this->assertEquals($arr3, $actual);

assertEqualsCanonicalizing() 値が同値であることを検証(キーおよび並び順は不問)

// OK キーも並び順も同値の配列
$this->assertEqualsCanonicalizing($arr1, $actual);
// OK キーは同値だが並び順が異なる配列
$this->assertEqualsCanonicalizing($arr2, $actual);
// OK キーも並び順も異なる配列
$this->assertEqualsCanonicalizing($arr3, $actual);

Discussion