Test unitaires et test fonctionnels dans Symfony

Contenu

Pourquoi doit on réaliser des tests unitaires ou fonctionnels?

Les tests unitaires sont pratiques pour voir si vous rencontrerez une régression suite à une modification de code, et ce de manière automatique. En effet il peut être fastidieux de mettre en ligne une nouvelle feature et de tout devoir tester à la main, c’est chronophage.

Ceci dit, il n’est pas évident de rédiger les bons tests, le test doit être utiles et être fait sur des fonctionnalité suffisamment critiques ou essentielles. En effet il ne sert à rien de tester des getter et des setters.

De même est-il besoin de tester toutes les fonctions? dans un monde idéal oui, mais le temps peut manquer, donc il faut choisir soigneusement quels fonctions on veut tester.

De plus les test unitaire comme leur nom indique, sont des test sur des fonctions individuelle, il peut être plus intéressant de tester une fonctionnalité dans sa globalité, comme l’insertion d’un utilisateur, l’édition d’une page, on doit vérifier si la création de l’utilisateur se fait bien, ou si l’édition s’est bien passé, et que les valeurs entrées dans la base sont celle qu’on a envoyé. C’est pour ça qu’il existe des test fonctionnels, qui sont plus macro que les tests unitaires.

Les tests unitaires

Les tests unitaires ont utile sur des fonctions qui utilisent beaucoup d’algorithmique. Par exemple calcul d’un jour férié, calcul de nombre de jour ouvrés dans un mois.

Pour mettre en place les test unitaire, Symfony travaille avec PHPUnit, et il vous fuat installer la classe wrapper de Symfony, vous ne travaillez pas directement avec PHPUnit.

composer require --dev symfony/phpunit-bridge
# pour lancer le test
./bin/phpunit

Il y a quelques fichiers qui se sont installés : phpunit.dist.xml, env.test, bin/phpunit, versionnez les, ils sont nécessaires pour lancer les tests.

Le premier test

Imaginez que vous avez une méthode de classe à tester

namespace App\Util;

class Calculator
{
    public function add($a, $b)
    {
        return $a + $b;
    }
}

Il vous faut une seconde classe appelée classe de test

namespace App\Tests\Util;

use App\Util\Calculator;
use PHPUnit\Framework\TestCase;

class CalculatorTest extends TestCase
{
    public function testAdd()
    {
        $calculator = new Calculator();
        $result = $calculator->add(30, 12);

        // assert that your calculator added the numbers correctly!
        $this->assertEquals(42, $result);
    }
}

Regardez les imports et les namespaces, ils sont important. Normal d’importer la classe qu’on veut tester (nous verrons que ce n’est pasle cas pour les tests fonctionnels). Pour lancer le test il vous faut en ligne de commande entrer :

./bin/phpunit

Les tests fonctionnels

Les tests fonctionnels doivent être privilégiés,

Retour en haut