2012-01-28 5 views
1

はでvar_exportごとにチェックするために、我々は次の配列、$myArrayを持って言う:PHPUnit:配列に特定の属性を持つオブジェクトがあることを確認するにはどうすればよいですか?

array (
    0 => AnObject::__set_state(array(
      'id' => 10, 
      'name' => 'foo' 
)), 
    1 => AnObject::__set_state(array(
      'id' => 23, 
      'name' => 'bar' 
)), 
    2 => AnObject::__set_state(array(
      'id' => 55, 
      'name' => 'baz' 
)), 
) 

この配列は'bar'の名前を持つAnObjectが含まれている場合、アサーションは渡す必要があります。

私はAnObject値の位置を知っていたならば、私が使用できることを知っている:

$this->assertAttributeSame('bar', 'name', $myArray[1]); 

$this->assertThat()を使用するには、そこにいくつかの方法である、または別のタイプは、アレイ全体をチェックしてのtrueを返すことが含まれていオブジェクトの1つに一致する属性がありますか?

答えて

3

このような組み込みのアサーションはありません。予想される結果を得るためにそれらを組み合わせる可能性は考えられません。

私がお勧めするのは、配列を受け入れ、ループで必要なチェックを行うヘルパーメソッドを作成することです。

他のソリューションは、ちょうどこの場合のために完全に新しいアサーションを作成することですが、私はそれがこの仕事のためにやり過ぎだと思います;-)以下、zerkmsが提供する答えに拡大

+1

が依存:

は、元のポスターの質問を解決するために、自分の主張を統合することは困難ではありません。ただ言って。 – hakre

+0

@hakre:ただ同意する:-) – zerkms

1

は、私はこの正確なタスクに近づい方法です:配列を確認する

PHPUnit_Framework_Assert::assertTrue($this->assertArrayContainsSameObject($yourArray, $theObjectToCheck)); 

(すなわち必ずしも同じインスタンスを参照しない)同じ属性と値を持つオブジェクトを含む:

private function assertArrayContainsSameObject($theArray, $theObject) 
{ 
    foreach($theArray as $arrayItem) { 
     if($arrayItem == $theObject) { 
      return true; 
     } 
    } 
    return false; 
} 

同じ参照を確認するには、=====に変更するだけです。あなたはより頻繁にチェックするか、実際の比較はますます複雑になっていることが必要な場合は、

PHPUnit_Framework_Assert::assertTrue($this->assertArrayContainsSameObjectWithValue($yourArray, 'name', 'bar')); 


private function assertArrayContainsSameObjectWithValue($theArray, $attribute, $value) 
{ 
    foreach($theArray as $arrayItem) { 
     if($arrayItem->$attribute == $value) { 
      return true; 
     } 
    } 
    return false; 
} 
関連する問題