Dart:
Escrevendo testes

Como fazer:

Em Dart, o pacote test é comumente usado para escrever testes. Primeiro, adicione o pacote test ao seu pubspec.yaml:

dev_dependencies:
  test: ^1.0.0

Depois, escreva um teste para uma função simples. Suponha que você tenha uma função que adiciona dois números:

int add(int a, int b) {
  return a + b;
}

Em seguida, crie um arquivo chamado add_test.dart no diretório test e escreva seu caso de teste:

import 'package:test/test.dart';
import '../lib/add.dart'; // Assuma que sua função `add` está em lib/add.dart

void main() {
  test('adiciona dois números', () {
    var esperado = 3;
    expect(add(1, 2), equals(esperado));
  });
}

Para executar os testes, use o comando Dart:

$ dart test

A saída de exemplo pode se parecer com:

00:01 +1: Todos os testes passaram!

Usando uma biblioteca de terceiros: Mockito para simulação

Para testar código que possui dependências complexas, você pode usar Mockito para criar objetos simulados. Primeiro, adicione Mockito ao seu pubspec.yaml:

dev_dependencies:
  mockito: ^5.0.0

Supondo que você tenha uma classe UserRepository que busca dados de usuários, e você deseja testar um UserService que depende de UserRepository sem acessar um banco de dados real:

import 'package:mockito/mockito.dart';
import 'package:test/test.dart';
import 'package:seu_projeto/user_repository.dart';
import 'package:seu_projeto/user_service.dart';

// Criar uma classe Mock usando Mockito
class MockUserRepository extends Mock implements UserRepository {}

void main() {
  group('Testes de UserService', () {
    test('Busca usuário com sucesso', () {
      // Criar instância mock
      final mockUserRepository = MockUserRepository();
      final userService = UserService(mockUserRepository);

      // Configurar comportamento mock
      when(mockUserRepository.fetchUser(1)).thenReturn(User(id: 1, name: 'Usuário Teste'));

      // Afirmar que o método mockado é chamado com os argumentos esperados
      expect(userService.getUserName(1), 'Usuário Teste');
      verify(mockUserRepository.fetchUser(1)).called(1);
    });
  });
}

Executar este teste confirma que o UserService interage corretamente com UserRepository, usando a simulação para imitar as interações reais de maneira controlada.