Ich versuche zu validieren, dass eine php7 Funktion nur ganze Zahlen akzeptiert.Mache phpunit catch php7 TypeError
Dies ist die Klasse:
<?php
declare(strict_types=1);
class Post
{
private $id;
public function setId(int $id)
{
$this->id = $id;
}
}
Und dies ist der Test:
<?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);
}
}
}
Der Fehler, den ich bekommen ist:
TypeError: Argument 1 passed to Post::setId() must be of the type integer, string given, called in /path/test/PostTest.php on line 35
Ist es möglich, so zu validieren Error? macht es auch Sinn, einen solchen Check durchzuführen?
Könnten Sie Details geben über die superflous Aspekt der Nichtübereinstimmung Testtyp? Warum ist es sinnlos zu überprüfen, dass ich nicht vergessen habe, zum ersten Argument von 'myMethod()' einen Typhinweis hinzuzufügen? – marcv
Dies scheint nicht der Fall zu sein. Aus Ihrer eigenen Dokumentation: 'Standardmäßig konvertiert PHPUnit PHP-Fehler, Warnungen und Hinweise, die während der Ausführung eines Tests ausgelöst werden, zu einer Ausnahme.Es scheint, dass Sie' @expectedException PHPUnit \ Framework \ Error' benötigen, um PHP zu erwarten 'Error's (einschließlich' Error's, die über PHP 7 'assert()' ausgegeben werden), was zumindest kontraintuitiv ist. – chili
könnten Sie erklären (vielleicht mit einem Dokumentationsverweis), wie Sie dieses Problem lösen? https://stackoverflow.com/questions/48486568/catch-an-error-as-exception – zioMitch