При модульном тестировании в 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?
EDIT: индивидуальное решение с признаком
Как предложенному Вейл, я придумал индивидуальное решение для этого, используя черты. Здесь приведен пример с добавлением semplified.
// 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
Если вы нашли, вы, вероятно, захотите «вырваться» из цикла. – AbraCadaver
Вы можете попробовать [assertInstanceOf()] (https://github.com/sebastianbergmann/phpunit/blob/master/src/Framework/Assert.php#L1236) как [пример] (https://github.com/ sebastianbergmann/PHPUnit/BLOB/Master/тесты/Framework/AssertTest.php # L3835). – acfreitas