Dart:
Pisanie testów

Jak to zrobić:

W Dartcie często używa się pakietu test do pisania testów. Najpierw dodaj pakiet test do pliku pubspec.yaml:

dev_dependencies:
  test: ^1.0.0

Następnie napisz test dla prostej funkcji. Załóżmy, że masz funkcję, która dodaje dwie liczby:

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

Kolejno, utwórz plik o nazwie add_test.dart w katalogu test i napisz swój przypadek testowy:

import 'package:test/test.dart';
import '../lib/add.dart'; // Zakładając, że twoja funkcja `add` znajduje się w lib/add.dart

void main() {
  test('dodaje dwie liczby', () {
    var expected = 3;
    expect(add(1, 2), equals(expected));
  });
}

Aby uruchomić testy, użyj polecenia Dart:

$ dart test

Przykładowe wyjście może wyglądać tak:

00:01 +1: Wszystkie testy zakończone sukcesem!

Używanie biblioteki firm trzecich: Mockito do mockowania

Do testowania kodu, który ma złożone zależności, możesz użyć Mockito do tworzenia obiektów mock. Najpierw dodaj Mockito do swojego pubspec.yaml:

dev_dependencies:
  mockito: ^5.0.0

Załóżmy, że masz klasę UserRepository, która pobiera dane użytkownika, i chcesz przetestować UserService, który zależy od UserRepository, bez uderzania do prawdziwej bazy danych:

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

// Tworzenie klasy Mock za pomocą Mockito
class MockUserRepository extends Mock implements UserRepository {}

void main() {
  group('Testy UserService', () {
    test('Pobiera użytkownika pomyślnie', () {
      // Utwórz instancję mock
      final mockUserRepository = MockUserRepository();
      final userService = UserService(mockUserRepository);

      // Ustawienie zachowania mock
      when(mockUserRepository.fetchUser(1)).thenReturn(User(id: 1, name: 'Testowy Użytkownik'));

      // Asercja, że zmokowana metoda została wywołana z oczekiwanymi argumentami
      expect(userService.getUserName(1), 'Testowy Użytkownik');
      verify(mockUserRepository.fetchUser(1)).called(1);
    });
  });
}

Uruchomienie tego testu potwierdza, że UserService poprawnie współpracuje z UserRepository, używając mockowania do symulowania prawdziwych interakcji w kontrolowany sposób.