paki/laravel-auto-test

Package Laravel pour générer automatiquement des tests unitaires.

v1.1.3 2025-01-05 21:37 UTC

This package is auto-updated.

Last update: 2025-07-06 01:21:10 UTC


README

Un package Laravel pour générer automatiquement des tests unitaires pour les méthodes annotées avec @Testable.

Fonctionnalités

  • 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.

Installation

  1. Ajouter le package à votre projet :

    composer require paki/laravel-auto-test
  2. (Optionnel) Publier la configuration :

    php artisan vendor:publish --provider="Paki\AutoTest\TestGeneratorServiceProvider"

Exemple d'usage

1. Usage de base

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
}

2. Personnaliser la réponse attendue

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
}

3. Personnaliser le type d'assertion

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
}

4. Exemple complet avec plusieurs annotations

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";
    }

5. Commande artisan pour générer les tests

  1. 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 assertion assertEquals, vous pouvez exécuter la commande suivante :

    php artisan generate:tests --directory=Services --assertion=assertEquals --response="Success"
  2. Générer des tests pour un autre répertoire (par exemple Controllers) :

    php artisan generate:tests
  3. Générer des tests avec l'assertion par défaut assertNotNull :

    php artisan generate:tests
  4. 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"
  5. Activer les tests de performance :

    Pour activer les tests de performance, utilisez l'option --performance=true :

    php artisan generate:tests --performance=true

Options disponibles

  • --directory : Le répertoire des classes à explorer (par défaut Controller).
  • --response : La réponse attendue pour les tests générés (par défaut null).
  • --assertion : Le type d'assertion à utiliser pour les tests (par défaut assertNotNull).
  • --mock : Les dépendances à mocker (par exemple App\\Services\\SomeService).
  • --performance : Activer les tests de performance (true/false).

Structure des tests générés

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);
}

Limitations et À venir

  • 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.

Contributions

Les contributions sont les bienvenues ! Si vous souhaitez ajouter des fonctionnalités ou corriger des bugs, veuillez ouvrir une pull request sur GitHub.

Licence

Ce package est sous licence MIT. Consultez le fichier LICENSE pour plus de détails.