CommunityEscrita e Ediçãogithub.com

photoeven2-netizen/astronusa

Escreva e organize testes unitários para funções, métodos e classes usando o pacote `package:test`. Use ao criar nova lógica ou corrigir bugs para garantir que o código permaneça correto e livre de regressões.

O que é astronusa?

Esta skill capacita o agente a escrever e executar testes unitários para aplicações Dart e Flutter, utilizando o pacote oficial `package:test`. Ela é essencial para desenvolvedores que desejam manter a correção do código e prevenir regressões durante o desenvolvimento de novas funcionalidades ou correções de bugs. A skill cobre desde a estruturação de arquivos de teste no diretório `test`, espelhando a estrutura `lib`, até a escrita de testes síncronos e assíncronos com `group()`, `test()` e `expect()`. Além disso, oferece suporte à criação de mocks com `package:mockito` para testar componentes que dependem de injeção de dependência. O fluxo de trabalho inclui um checklist passo a passo, desde a criação do arquivo de teste até o loop de feedback de execução, análise de falhas e correção. Exemplos detalhados demonstram casos de uso comuns e o uso de mocks, facilitando a implementação de testes robustos.

Funciona com~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 Escrita e Edição skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Testando Aplicações Dart e Flutter

Conteúdo

Estruturando Arquivos de Teste

Organize os arquivos de teste para espelhar a estrutura do diretório lib e manter a previsibilidade.

  • Coloque todo o código de teste dentro do diretório test na raiz do pacote.
  • Anexe _test.dart ao final de todos os nomes de arquivos de teste (ex.: lib/src/utils.dart deve ser testado em test/src/utils_test.dart).
  • Se estiver escrevendo testes de integração, coloque-os em um diretório integration_test na raiz do pacote.

Escrevendo Testes

Utilize package:test como a biblioteca de teste padrão para aplicações Dart.

  • Importe package:test/test.dart (ou package:flutter_test/flutter_test.dart para Flutter).
  • Agrupe testes relacionados usando a função group() para fornecer contexto compartilhado.
  • Defina casos de teste individuais usando a função test().
  • Valide resultados usando a função expect() junto com matchers (ex.: equals(), isTrue, throwsA()).
  • Escreva testes assíncronos usando a sintaxe padrão async/await. O executor de testes aguarda automaticamente a conclusão da Future.
  • Gerencie a configuração e limpeza dos testes usando callbacks setUp() e tearDown().
  • Se estiver testando código que depende de injeção de dependência, use package:mockito junto com package:test para gerar objetos mock, configurar cenários fixos e verificar interações.

Executando Testes

Selecione o executor de teste apropriado com base no tipo de projeto e localização do teste.

  • Se estiver trabalhando em um projeto Dart puro, execute os testes usando o comando dart test.
  • Se estiver trabalhando em um projeto Flutter, execute os testes usando o comando flutter test.
  • Se estiver executando testes de integração, especifique explicitamente o caminho do diretório, pois o executor padrão o ignora: dart test integration_test ou flutter test integration_test.

Fluxo de Trabalho de Implementação de Testes

Siga este fluxo de trabalho sequencial ao implementar novos conjuntos de testes. Copie a lista de verificação para acompanhar seu progresso.

Progresso da Tarefa

  • 1. Crie o arquivo de teste no diretório test/, garantindo o sufixo _test.dart.
  • 2. Importe package:test/test.dart e a biblioteca alvo.
  • 3. Defina uma função main().
  • 4. Inicialize recursos compartilhados ou mocks usando setUp().
  • 5. Escreva casos test() agrupados por funcionalidade usando group().
  • 6. Execute o conjunto de testes usando o comando CLI apropriado.
  • 7. Loop de Feedback: Execute o teste -> Revise o stack trace para falhas -> Corrija a implementação ou asserções -> Reexecute até passar.

Exemplos

Conjunto de Teste Unitário Padrão

Demonstra agrupamento, configuração, teste síncrono e assíncrono.

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

Mock com Mockito

Demonstra a configuração de um objeto mock para teste de injeção de dependência.

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';

// Gere o mock usando 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 {
      // Configure o mock
      when(mockApiClient.get('/data')).thenAnswer((_) async => '{"id": 1}');

      // Execute o sistema sob teste
      final result = await dataService.fetchData();

      // Verifique resultados e interações
      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.

Habilidades Relacionadas