CommunityRédaction et éditiongithub.com

Tests pour applications Dart et Flutter

Écrire et organiser des tests unitaires pour les fonctions, méthodes et classes en utilisant `package:test`. À utiliser lors de la création de nouvelle logique ou de la correction de bugs pour garantir l'exactitude du code et éviter les régressions.

Qu'est-ce que Tests pour applications Dart et Flutter ?

Cette compétence vous guide dans la rédaction et l'organisation de tests unitaires pour les applications Dart et Flutter, en utilisant la bibliothèque `package:test`. Elle est particulièrement utile pour les développeurs qui souhaitent maintenir un code de haute qualité en détectant rapidement les régressions lors de l'ajout de nouvelles fonctionnalités ou de corrections de bugs. La compétence prend en charge à la fois les projets Dart purs et Flutter, avec des commandes d'exécution spécifiques (`dart test` ou `flutter test`). Vous apprendrez à structurer vos fichiers de test en miroir du répertoire `lib`, à écrire des tests synchrones et asynchrones, à utiliser des mocks avec `package:mockito` pour l'injection de dépendances, et à suivre un flux de travail progressif en sept étapes, de la création du fichier à l'exécution en boucle de rétroaction. Des exemples concrets illustrent l'écriture de suites de tests standard et l'utilisation de mocks pour isoler les dépendances externes.

Compatible avec~Claude Code~Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/photoeven2-netizen/astronusa/tree/HEAD/.agents/skills/dart-add-unit-test

Installed? Explore more Rédaction et édition skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Tester les applications Dart et Flutter

Sommaire

Structurer les fichiers de test

Organisez les fichiers de test de manière à refléter la structure du répertoire lib pour garantir la prévisibilité.

  • Placez tout le code de test dans le répertoire test à la racine du paquet.
  • Ajoutez _test.dart à la fin de tous les noms de fichiers de test (par exemple, lib/src/utils.dart doit être testé dans test/src/utils_test.dart).
  • Si vous écrivez des tests d'intégration, placez-les dans un répertoire integration_test à la racine du paquet.

Écrire des tests

Utilisez package:test comme bibliothèque de test standard pour les applications Dart.

  • Importez package:test/test.dart (ou package:flutter_test/flutter_test.dart pour Flutter).
  • Regroupez les tests connexes à l'aide de la fonction group() pour fournir un contexte partagé.
  • Définissez des cas de test individuels à l'aide de la fonction test().
  • Validez les résultats à l'aide de la fonction expect() avec des comparateurs (par exemple, equals(), isTrue, throwsA()).
  • Écrivez des tests asynchrones en utilisant la syntaxe standard async/await. Le lanceur de tests attend automatiquement la fin de la Future.
  • Gérez la configuration et le nettoyage des tests à l'aide des callbacks setUp() et tearDown().
  • Si vous testez du code qui repose sur l'injection de dépendances, utilisez package:mockito avec package:test pour générer des objets simulés, configurer des scénarios fixes et vérifier les interactions.

Exécuter les tests

Sélectionnez le lanceur de tests approprié en fonction du type de projet et de l'emplacement des tests.

  • Si vous travaillez sur un projet Dart pur, exécutez les tests à l'aide de la commande dart test.
  • Si vous travaillez sur un projet Flutter, exécutez les tests à l'aide de la commande flutter test.
  • Si vous exécutez des tests d'intégration, spécifiez explicitement le chemin du répertoire, car le lanceur par défaut l'ignore : dart test integration_test ou flutter test integration_test.

Flux de travail pour l'implémentation des tests

Suivez ce flux de travail séquentiel lors de l'implémentation de nouvelles suites de tests. Copiez la liste de contrôle pour suivre votre progression.

Progression des tâches

  • 1. Créez le fichier de test dans le répertoire test/, en veillant à utiliser le suffixe _test.dart.
  • 2. Importez package:test/test.dart et la bibliothèque cible.
  • 3. Définissez une fonction main().
  • 4. Initialisez les ressources partagées ou les objets simulés à l'aide de setUp().
  • 5. Écrivez des cas de test() regroupés par fonctionnalité à l'aide de group().
  • 6. Exécutez la suite de tests à l'aide de la commande CLI appropriée.
  • 7. Boucle de rétroaction : Lancez le test -> Examinez la trace de la pile en cas d'échec -> Corrigez l'implémentation ou les assertions -> Relancez jusqu'à réussite.

Exemples

Suite de tests unitaires standard

Illustre le regroupement, la configuration, les tests synchrones et asynchrones.

import 'package:test/test.dart';
import 'package:my_package/calculator.dart';

void main() {
  group('Calculator', () {
    late Calculator calc;

    setUp(() {
      calc = Calculator();
    });

    test('adds two numbers correctly', () {
      expect(calc.add(2, 3), equals(5));
    });

    test('handles asynchronous operations', () async {
      final result = await calc.fetchRemoteValue();
      expect(result, isNotNull);
      expect(result, greaterThan(0));
    });
  });
}

Mocking avec Mockito

Montre comment configurer un objet simulé pour les tests d'injection de dépendances.

import 'package:test/test.dart';
import 'package:mockito/mockito.dart';
import 'package:mockito/annotations.dart';
import 'package:my_package/api_client.dart';
import 'package:my_package/data_service.dart';

// Générez le mock avec build_runner : dart run build_runner build
@GenerateNiceMocks([MockSpec<ApiClient>()])
import 'data_service_test.mocks.dart';

void main() {
  group('DataService', () {
    late MockApiClient mockApiClient;
    late DataService dataService;

    setUp(() {
      mockApiClient = MockApiClient();
      dataService = DataService(apiClient: mockApiClient);
    });

    test('returns parsed data on successful API call', () async {
      // Configurez le mock
      when(mockApiClient.get('/data')).thenAnswer((_) async => '{"id": 1}');

      // Exécutez le système testé
      final result = await dataService.fetchData();

      // Vérifiez les résultats et les interactions
      expect(result.id, equals(1));
      verify(mockApiClient.get('/data')).called(1);
    });
  });
}

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

Skills associés