Моки, имитации и покрытие
Изолируйте компоненты и измеряйте объём тестирования
«Моки, имитации и покрытие» — бесплатный урок Dart Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Dart Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Dart Academy содержит 4 уроков всего.
Изолируйте единицу
Модульный тест должен проверять одну часть системы отдельно. Настоящие базы данных и сети делают тесты медленными и нестабильными, поэтому мы заменяем их. 🔌
Тестовые двойники
Тестовый двойник заменяет настоящую зависимость. Обычно используются моки, фейки и заглушки.
Что такое фейк
Фейк имеет рабочую, но упрощённую реализацию, например список в памяти вместо настоящей базы данных.
class FakeRepo implements Repo {
final _items = <Item>[];
}Что такое мок
Мок записывает, как его вызывали, чтобы Вы могли проверять взаимодействия, а не только итоговые значения.
Пакет для создания моков
Специальный пакет автоматически создаёт моки. Аннотируйте нужный тип и запустите средство сборки, чтобы создать его.
@GenerateMocks([Repo])
import 'repo_test.mocks.dart';Настройка поведения
Настройте мок: укажите, что при вызове этого метода нужно вернуть это значение. Так поведение становится предсказуемым.
when(repo.find(1))
.thenReturn(Item('a'));Проверка вызовов
Используйте проверку, чтобы убедиться, что метод был вызван и узнать, сколько раз это произошло. Так Вы докажете, что код правильно взаимодействовал со своей зависимостью.
verify(repo.save(any)).called(1);Настройка асинхронного поведения
Для методов, возвращающих асинхронный результат, задайте поведение с помощью thenAnswer, чтобы мок мог вернуть асинхронный результат.
when(api.load())
.thenAnswer((_) async => 'ok');Мок или фейк
Выбирайте фейк, когда Вам нужно реалистичное поведение, а мок — когда важно, какие именно вызовы произошли.
Что означает покрытие
Покрытие измеряет, какие строки фактически выполняются в Ваших тестах. Высокое покрытие указывает на тщательность, но никогда не гарантирует правильность.
Создание отчёта о покрытии
Запустите тесты со сбором данных о покрытии, а затем преобразуйте эти данные в отчёт, который можно прочитать или загрузить в инструмент.
dart test --coverage=coverageБыстрая проверка
Какой тестовый двойник записывает вызовы, чтобы Вы могли их проверить?
Повторение
Вы изолировали единицы с помощью фейков и моков, настроили заглушки, проверили вызовы и измерили покрытие. Быстрые, сфокусированные и надёжные тесты. 🎯
Часто задаваемые вопросы
Урок «Моки, имитации и покрытие» бесплатный?
Да — полный текст урока «Моки, имитации и покрытие» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Dart Academy, подпишись на CoddyKit PRO. Курс Dart Academy содержит 4 уроков всего.
Чему я научусь в уроке «Моки, имитации и покрытие»?
Изолируйте компоненты и измеряйте объём тестирования Ты практикуешь Dart Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Dart Academy?
Предыдущий опыт не требуется. Dart Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Моки, имитации и покрытие»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Dart Academy?
Да. Каждый урок Dart Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Ваш первый тест и expect
- group, setUp и tearDown
- Тестирование асинхронного кода и потоков
- Моки, имитации и покрытие