Session BRE04 Help

Exercice : Tests unitaires

Cet "exercice" est une traduction de l'exemple de base de la documentation de PHPUnit.

Étape 0 : Créer les dossiers

Créez un repository GitHub public avec un README et appelez-le bre04-unit-tests. Puis créez un dossier src et un dossier tests.

Étape 1 : composer

Nous allons indiquer à composer que nous allons utiliser PHPUnit :

composer require --dev phpunit/phpunit ^12

Le fichier composer.json généré doit ressembler à ceci :

{ "require-dev": { "phpunit/phpunit": "^12" } }

Modifiez-le pour qu'il ressemble à ceci :

{ "autoload": { "classmap": [ "src/" ] }, "require-dev": { "phpunit/phpunit": "^12" } }

Étape 2 : Créer la source

Dans le dossier src, créez un fichier Email.php, dans lequel vous mettrez le code suivant :

<?php declare(strict_types=1); class Email { private string $email; private function __construct(string $email) { $this->ensureIsValidEmail($email); $this->email = $email; } public static function fromString(string $email): self { return new self($email); } public function asString(): string { return $this->email; } private function ensureIsValidEmail(string $email): void { if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { throw new InvalidArgumentException( sprintf( '"%s" is not a valid email address', $email ) ); } } }

Étape 3 : Créez le test

Dans le dossier tests, créez un fichier EmailTest.php, dans lequel vous mettrez le code :

<?php declare(strict_types=1); use PHPUnit\Framework\TestCase; class EmailTest extends TestCase { public function testCanBeCreatedFromValidEmail(): void { $string = 'user@example.com'; $email = Email::fromString($string); $this->assertSame($string, $email->asString()); } public function testCannotBeCreatedFromInvalidEmail(): void { $this->expectException(InvalidArgumentException::class); Email::fromString('invalid'); } }

Étape 4 : générer l'autoload

Pour précharger vos classes faites la commande suivante :

composer dump-autoload

Étape 5 : Executez le test

Pour exécuter les tests faites la commande suivante :

./vendor/bin/phpunit --testdox tests
24 July 2025