Appliquer la notion : tester une exception PHP

Question

Ajoutez une condition à la méthode carre() de la classe Calculatrice levant une exception de type InvalidArgumentException si la valeur passée en argument ne correspond pas à un nombre entier.

Créez une nouvelle classe de test « ExceptionTest » dont l'unique méthode testException() doit permettre de tester l'exception que vous venez de rédiger dans la classe Calculatrice.

Pour ce faire, favorisez l'utilisation de l'annotation vue dans cette partie.

Indice

Utilisez la méthode PHP is_int() pour vérifier si la variable qui est passée en argument est de type entier. Si ça n'est pas le cas, levez l'exception.

Solution

La classe à tester

1
<?php
2
# src/Util/Calculatrice.php
3
namespace App\Util;
4
use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
5
6
class Calculatrice {
7
    public function carre($n) {
8
        if(!is_int($n)) {
9
            throw new InvalidArgumentException("La méthode 'carre()' accepte uniquement un entier en entrée.");
10
        }
11
        return $n * $n;
12
    }
13
}

La classe de test

1
<?php
2
# tests/Util/ExceptionTest.php
3
namespace Tests\Util;
4
5
use PHPUnit\Framework\TestCase;
6
use App\Util\Calculatrice;
7
8
class ExceptionTest extends TestCase
9
{
10
    /**
11
     * @expectedException InvalidArgumentException
12
     */
13
    public function testException()
14
    {
15
        $calculatrice = new Calculatrice();
16
        $calculatrice->carre("test");
17
    }
18
}