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
@TestResponse
et le type d'assertion avec@assertion
directement 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
Services
avec 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.