Bonjour, je me pose plusieurs questions concernant les tests unitaires.
Exemple simple
Sur une méthode comme celle-ci :
/**
* Return the value of an environment variable
*
* @param $name name of the environment variable
* @param $default value to return if the specified environment variable does not exist
*/
public static function getEnv(string $name, mixed $default = null): mixed
{
$name = strtoupper($name);
return array_key_exists($name, $_ENV) ? $_ENV[$name] : $default;
}
j’effectue les tests suivants :
<?php
declare(strict_types=1);
use
PHPUnit\Framework\TestCase,
App\App;
final class AppTest extends TestCase
{
protected function setUp(): void
{
App::loadEnv();
}
public function testGetEnv(): void
{
$env = App::getEnv('app_name');
$this->assertSame('My Wirework App', $env);
}
public function testGetEnvNull(): void
{
$env = App::getEnv('does_not_exist');
$this->assertSame(null, $env);
}
public function testGetEnvDefault(): void
{
$env = App::getEnv('does_not_exist', 42);
$this->assertSame(42, $env);
}
Ceci-dit, faut-il tester les erreurs ? Par exemple si je me trompe de type pour $name
ou si j’oublie tout simplement de le spécifier ?
Exemple un peu plus compliqué
J’utilise la librairie vlucas/phpdotenv
, et j’ai écris le code suivant :
/**
* Load environment variables from the `.env` file at the root of the project.
*/
public static function loadEnv(): void
{
$dotenv = \Dotenv\Dotenv::createImmutable(__DIR__ . '/..');
$dotenv->load();
$dotenv->required(['BASE_DIR', 'APP_NAME', 'LOG_PATH', 'ENV'])->notEmpty();
}
Ici, je ne fais qu’utiliser des méthodes qui ont déjà été testées avec vlucas/phpdotenv
. Y a t-il un intérêt à tester celle-ci ?
Exemple encore plus compliqué
J’utilise ici la librairie filp/whoops
, et j’ai écris le code suivant :
/**
* Display an error page for every exception.
*/
public static function runWhoops(): void
{
$whoops = new \Whoops\Run();
if (self::getEnv('ENV') !== 'prod') {
$whoops->pushHandler(new \Whoops\Handler\PrettyPageHandler);
} else {
$whoops->pushHandler(function($e) {
self::say(
'<strong style="color: red;">This is production, so this is a friendly error page !</strong>'
);
});
}
$whoops->register();
}
Le if
dépend d’une variable d’environnement qui peut seulement être modifié directement au sein du fichier .env
à la racine du projet. Ainsi, il est délicat de tester cette condition.
Au final je ne sais pas trop quoi et comment tester et j’aurais besoin de vos conseils.
Merci.