在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