在PHPUnit中進行單元測試時,我處於需要檢查數組是否至少包含一個特定類型的對象的情況。PHPUnit - 檢查數組是否包含特定類型的對象
這裏是我要找的
$obj_1 = new Type1;
$obj_2 = new Type2;
$container = array($obj_1, $obj_2);
// some logic and array manipulation here
// need something like this
$this->assertArrayHasObjectOfClass('Type1', $container);
很顯然,我可以做到這一點的自定義代碼一個簡單的例子,但沒有任何斷言(或它們的組合),讓我這樣做呢?
我需要在多個測試中做很多次,所以,如果我需要的斷言不存在,我該如何擴展一組PHPUnit斷言?
編輯:與特質
至於建議由韋爾定製的解決方案,我想出了這個用性狀的定製解決方案。這是一個簡單的版本。
// trait code
trait CustomAssertTrait
{
public function assertArrayHasObjectOfType($type, $array, $message = '') {
$found = false;
foreach($array as $obj) {
if(get_class($obj) === $type) {
$found = true;
break;
}
}
$this->assertTrue($found, $message);
}
}
// test code
class CustomTest extends PHPUnit_Framework_TestCase {
use CustomAssertTrait;
// test methods...
}
這將是很好,如果你可以提供你想要達到什麼樣的一個最小的工作示例。 – martin 2015-04-02 09:55:31
如果發現你可能想從循環中斷開。 – AbraCadaver 2015-04-02 22:49:37
您可以嘗試[assertInstanceOf()](https://github.com/sebastianbergmann/phpunit/blob/master/src/Framework/Assert.php#L1236)作爲[示例](https://github.com/ sebastianbergmann/PHPUnit的/斑點/主/測試/框架/ AssertTest.php#L3835)。 – acfreitas 2015-04-07 19:49:09