Dart:
Написання тестів
Як це зробити:
У Dart зазвичай використовується пакет test
для написання тестів. Спочатку додайте пакет test
до вашого pubspec.yaml
:
dev_dependencies:
test: ^1.0.0
Потім напишіть тест для простої функції. Припустімо, у вас є функція, яка додає два числа:
int add(int a, int b) {
return a + b;
}
Далі створіть файл під назвою add_test.dart
у директорії test
та напишіть ваш тестовий випадок:
import 'package:test/test.dart';
import '../lib/add.dart'; // Припускаємо, що ваша функція `add` знаходиться у lib/add.dart
void main() {
test('додає два числа', () {
var expected = 3;
expect(add(1, 2), equals(expected));
});
}
Щоб запустити тести, використовуйте команду Dart:
$ dart test
Зразок виводу може виглядати наступним чином:
00:01 +1: Усі тести пройдено!
Використання сторонньої бібліотеки: Mockito для мокінгу
Для тестування коду, що має складні залежності, ви можете використовувати Mockito для створення мок-об’єктів. Спочатку додайте Mockito до вашого pubspec.yaml
:
dev_dependencies:
mockito: ^5.0.0
Припустимо у вас є клас UserRepository
, що отримує дані користувача, і ви хочете протестувати UserService
, який залежить від UserRepository
без звернення до справжньої бази даних:
import 'package:mockito/mockito.dart';
import 'package:test/test.dart';
import 'package:your_project/user_repository.dart';
import 'package:your_project/user_service.dart';
// Створюємо мок-клас за допомогою Mockito
class MockUserRepository extends Mock implements UserRepository {}
void main() {
group('Тести UserService', () {
test('Успішно отримує дані користувача', () {
// Створення мок-інстансу
final mockUserRepository = MockUserRepository();
final userService = UserService(mockUserRepository);
// Встановлення поведінки моку
when(mockUserRepository.fetchUser(1)).thenReturn(User(id: 1, name: 'Тестовий користувач'));
// Переконуємося, що мокований метод викликаний з очікуваними аргументами
expect(userService.getUserName(1), 'Тестовий користувач');
verify(mockUserRepository.fetchUser(1)).called(1);
});
});
}
Запуск цього тесту підтверджує, що UserService
вірно інтерактує з UserRepository
, використовуючи мокінг для симуляції реальних взаємодій контрольованим способом.