Сделать PHPUnit поймать php7 TypeError
Я пытаюсь проверить, что функция php7 принимает только целые числа.
Это класс:
<?php
declare(strict_types=1);
class Post
{
private $id;
public function setId(int $id)
{
$this->id = $id;
}
}
и это испытание:
<?php
declare(strict_types=1);
class PostTest extends PHPUnit_Framework_TestCase
{
private function getPostEntity()
{
return new Post();
}
public function testSetId()
{
$valuesExpected = [123, '123a'];
foreach ($valuesExpected as $input) {
$this->getPostEntity()->setId($input);
}
}
}
ошибка, которую я получаю:
TypeError: Argument 1 passed to Post::setId() must be of the type integer, string given, called in /path/test/PostTest.php on line 35
можно ли проверить такую ошибку? кроме того, есть ли смысл проводить такую проверку?
3 ответов
Да, вы можете проверить TypeError
Так же, как вы бы использовали для любого другого исключения.
однако я бы не стал проверять, что PHP выдает ошибку типа в случае несоответствия типов. Это своего рода тест, который становится излишним с кодом PHP 7.
к сожалению, TypeError
не подкласс Exception
(ссылка), в то время как он расширяет Error
. Единственное, что они действительно разделяют, это Throwable
интерфейс. ThrowMatcher не может фактически поймать TypeError.
если вы посмотрите на код в
src/PhpSpec/Matcher/ThrowMatcher.php
, вы можете видеть, что PHPSpec ловит исключения, которые наследуют"Exception
' а затем проверяет тип экземпляра этого исключения.
посмотреть также ответ.