2 votes

phpunit expectException() nom d'exception erroné

Lorsque j'exécute PHPUnit 6.5.13. et que j'ai une méthode de test suivant cet exemple Documentation sur les exceptions des tests PHPUnit

public function testSetRowNumberException()
{
    $this->expectException(\InvalidArgumentException::class);
    $result = $this->tableCell->setRowNumber('text');

}

qui teste cette méthode :

public function setRowNumber(int $number) : TableCell
{
    if (!is_int($number)) {
        throw new \InvalidArgumentException('Input must be an int.');
    }
    $this->rowNumber = $number;

    return $this;
}

J'ai eu cet échec :

Échec de l'affirmation que l'exception de type "TypeError" correspond à l'exception attendue "InvalidArgumentException".

la question est de savoir pourquoi "TypeError" est prise à l'assertion et comment faire utiliser l'assertion InvalidArgumentException ?

2voto

Jimmix Points 3923

Je l'ai. Le truc c'est que j'ai utilisé le jeu de caractères pour int c'est pourquoi le code n'a même pas atteint la commande thow.

cela fonctionne si la méthode testée n'a pas été définie en fonction de la typographie. int :

public function setRowNumber($number) : TableCell
{
    if (!is_int($number)) {
        throw new \InvalidArgumentException('Input must be an int.');
    }
    $this->rowNumber = $number;

    return $this;
}

ou lorsque le test a TypeError

public function testSetRowNumberException()
{
    $this->expectException(\TypeError::class);
    $result = $this->tableCell->setRowNumber('text');
} 

Je vais rester sur le deuxième exemple.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X