L'addition, s'il vous plaît

Exercice 3 sur 6 du chapitre 6 · 230 XP · 5 objectifs vérifiés par des tests

Notions abordées : Test unitaireTestCase#[DataProvider]expectException

Fini le calcul de tête : Gorm a fait écrire un service Addition, qui calcule la note de chaque table. Ses règles tiennent en trois lignes :

Et quand on partage l'addition (parPersonne()), zéro aventurier, c'est une erreur (InvalidArgumentException).

Ce genre de règle se casse facilement, en silence : un > à la place d'un >=, un elseif à la place d'un if… Écrivez les tests qui les protègent.

Votre mission

Dans tests/Taverne/AdditionTest.php, testez total() et parPersonne() : chaque règle, et surtout ses frontières.

Un test unitaire

Pas besoin de navigateur ni de base ici : Addition est un simple objet PHP. Le test l'instancie, l'appelle et vérifie le résultat. Un test unitaire tourne en quelques millisecondes, et il dit précisément ce qui casse.

Plusieurs cas, un seul test : les data providers

Plutôt que dix méthodes presque identiques, un data provider fournit les jeux de données :

public static function additions(): iterable
{
    yield '6 aventuriers : -10 %' => [[100.0], 6, false, 90.0];
    // …
}

#[DataProvider('additions')]
public function testLeTotal(array $prix, int $personnes, bool $happyHour, float $attendu): void
{
    $this->assertSame($attendu, (new Addition())->total($prix, $personnes, $happyHour));
}

Quatre mutants 🐛 vous attendent. Chacun s'attaque à une règle, pile à sa frontière.