【发布时间】:2015-04-02 09:23:57
【问题描述】:
在 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 断言集?
编辑:具有特征的自定义解决方案
按照 Vail 的建议,我想出了一个使用特征的自定义解决方案。这是一个简化版。
// 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...
}
【问题讨论】:
-
如果您能提供一个您想要实现的最小工作示例,那就太好了。
-
如果发现你可能想
break退出循环。 -
您可以尝试将assertInstanceOf() 设为example。
-
我不认为我可以,因为我必须将它放在 for/foreach 循环中,如果第一次出现的不是我要查找的类,则执行将停止。跨度>
标签: php arrays unit-testing phpunit