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';
// Создаем класс Mock с использованием 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
, используя моки для симуляции реальных взаимодействий контролируемым способом.