Я хочу фиктивный объект, который может сказать мне, если:
Я хочу использовать ограничения PHPUnit для достижения этой цели, поэтому мой тестовый код будет выглядеть так:
$mock = $this->getMock('\Jodes\MyClass');
$mock->expects($this->once())
->method('myMethod')
->with(
$this->logicalAnd(
$this->isType('array'),
$this->arrayHasPair('my_key', 'my_value'),
)
);
// ... code here that should call the mock method
В этот предыдущий так вопрос, парень закончил тем, что написал свое собственное ограничение.
я нашел эта библиотека который, кажется, реализует несколько изящных вещей. Так что я установил его, добавив эту строку в моем composer.json
Требуется раздел:
"etsy/phpunit-extensions": "@stable"
Но когда я пытаюсь использовать его, я получаю сообщение об ошибке. Я использую это так:
class MyClassTest extends PHPUnit_Framework_TestCase {
public function arrayHasPair($key, $value){
return new PHPUnit_Extensions_Constraint_ArrayHasKeyValuePair($key, $value);
}
public function testmyMethod(){
// code as per my example above
}
}
Но это приводит к этой ошибке:
Неустранимая ошибка PHP: вызов неопределенного метода PHPUnit_Util_Type :: export () в C: \ MyProject \ vendor \ etsy \ phpunit-extensions \ PHPUnit \ Extensions \ Constraint \ ArrayHasKeyValuePair.php в строке 50
Этот предыдущий вопрос / ответ объясняет в чем проблема, но я не уверен, что мне с этим делать. Значит ли это, что разработчики этой библиотеки отказались от нее? Есть ли альтернатива для использования? Или какие у меня есть варианты для его исправления? Я поражен, что такие основные ограничения все еще не существуют в PHPUnit. Очевидно, я мог бы написать свои собственные ограничения, но, конечно, это не нужно?
PHPUnit_Util_Type::export()
метод был удален некоторое время назад. Расширение, которое вы хотите использовать, должно быть обновлено, чтобы быть совместимым с текущими версиями PHPUnit.
Других решений пока нет …