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 :
- happy hour : -20 % sur tout ;
- groupe de 6 aventuriers ou plus : -10 %, qui s'ajoute à l'happy hour (100 po → 80 → 72) ;
- les montants sont arrondis au centième de pièce d'or.
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.