Un package Laravel pour générer automatiquement des tests unitaires pour les méthodes annotées avec @Testable.
- Génération automatique de tests unitaires : Génère des tests pour les méthodes annotées avec
@Testable. - Personnalisation des tests via des annotations : Définissez la réponse attendue avec
@TestResponseet le type d'assertion avec@assertiondirectement dans le docblock des méthodes. - Répertoires personnalisés : Configurez le répertoire des classes à explorer (par défaut
Services). - Types d'assertions supportés : Vous pouvez choisir parmi plusieurs types d'assertions comme
assertEquals,assertNotNull,assertNull, etc.
-
Ajouter le package à votre projet :
composer require paki/laravel-auto-test
-
(Optionnel) Publier la configuration :
php artisan vendor:publish --provider="Paki\AutoTest\TestGeneratorServiceProvider"
Ajoutez l'annotation @Testable à la méthode que vous souhaitez tester. Cela indiquera au package que cette méthode doit être testée automatiquement.
/**
* @Testable
*/
public function someMethod()
{
// Logique de la méthode
}Si vous souhaitez définir une réponse attendue pour le test, vous pouvez utiliser l'annotation @TestResponse dans le docblock de votre méthode.
/**
* @Testable
* @TestResponse "Success"
*/
public function someMethod()
{
// Logique de la méthode
}L'annotation @assertion permet de spécifier le type d'assertion à utiliser dans le test généré. Par exemple, vous pouvez utiliser assertNull ou assertEquals.
/**
* @Testable
* @assertion assertNull
*/
public function someOtherMethod()
{
// Logique de la méthode
}Voici un exemple où nous combinons @Testable, @TestResponse et @assertion pour personnaliser entièrement le test généré.
/**
* @Testable
* @TestResponse "200 OK"
* @assertion assertEquals
*/
public function getUserDetails()
{
// Logique de la méthode
}Ce test vérifiera que la méthode getUserDetails() retourne "200 OK" en utilisant l'assertion assertEquals.
/**
* @Testable
* @TestInput: {"name": "paki","message":"test message"}
* @AssertStatus 201
*/
public function create(Request $request)
{
$this->validate($request, [
'name' => "required",
'message' => "required"
]);
return response()->json([], 201);
} /**
* @Testable
* @TestResponse "User Created"
* @TestParam: name='test'
*/
public function createUser($name)
{
return "User Created";
}-
Générer des tests pour un répertoire spécifique avec une réponse et assertion personnalisées :
Pour générer des tests pour le répertoire
Servicesavec une réponse"Success"et une assertionassertEquals, vous pouvez exécuter la commande suivante :php artisan generate:tests --directory=Services --assertion=assertEquals --response="Success" -
Générer des tests pour un autre répertoire (par exemple
Controllers) :php artisan generate:tests
-
Générer des tests avec l'assertion par défaut
assertNotNull:php artisan generate:tests
-
Générer des tests avec des dépendances mockées :
Si vous souhaitez mocker des dépendances dans vos tests, utilisez l'option
--mock:php artisan generate:tests --mock="App\\Services\\SomeService" -
Activer les tests de performance :
Pour activer les tests de performance, utilisez l'option
--performance=true:php artisan generate:tests --performance=true
--directory: Le répertoire des classes à explorer (par défautController).--response: La réponse attendue pour les tests générés (par défautnull).--assertion: Le type d'assertion à utiliser pour les tests (par défautassertNotNull).--mock: Les dépendances à mocker (par exempleApp\\Services\\SomeService).--performance: Activer les tests de performance (true/false).
Les tests générés seront enregistrés dans le répertoire tests/Unit/ et auront des noms basés sur les classes que vous avez annotées avec @Testable. Par exemple, si vous avez une classe SomeService, le test sera généré sous le nom SomeServiceTest.php.
Chaque méthode annotée avec @Testable générera un test avec la structure suivante :
public function testMethodName()
{
$instance = new SomeService();
$result = $instance->methodName();
// L'assertion choisie (par défaut assertNotNull)
$this->assertEquals('Success', $result);
}- Ce package génère des tests de base pour des méthodes simples. Les tests complexes, notamment ceux qui nécessitent une logique plus avancée, peuvent nécessiter une personnalisation manuelle.
- La prise en charge des tests de performance est encore limitée aux tests de base sur le temps d'exécution de la méthode.
Les contributions sont les bienvenues ! Si vous souhaitez ajouter des fonctionnalités ou corriger des bugs, veuillez ouvrir une pull request sur GitHub.
Ce package est sous licence MIT. Consultez le fichier LICENSE pour plus de détails.