Тестирование асинхронного кода и потоков
Ожидайте future и проверяйте последовательности событий
«Тестирование асинхронного кода и потоков» — бесплатный урок Dart Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Dart Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Dart Academy содержит 4 уроков всего.
Асинхронность требует внимания
Большая часть настоящего кода возвращает асинхронный результат. Если тест забывает дождаться его, он может завершиться ещё до окончания работы. ⏳
Верните результат или дождитесь его
Средство запуска ожидает завершения, когда тело теста является асинхронным и Вы дожидаетесь результата, либо когда Вы напрямую возвращаете асинхронный результат.
test('loads user', () async {
final u = await fetchUser();
expect(u.name, 'Ada');
});expectLater для асинхронных результатов
Используйте expectLater, когда проверяемое значение само является асинхронным результатом, например чтобы убедиться, что он завершается заданным результатом.
await expectLater(fetchValue(), completion(42));Сопоставитель завершения
Сопоставитель завершения проходит проверку, когда асинхронный результат успешно завершается, а его значение соответствует вложенному сопоставителю.
expectLater(load(), completion(isNotEmpty));Проверка асинхронных ошибок
Чтобы проверить, что асинхронный результат завершается ошибкой, объедините expectLater с throwsA, и тест убедится, что выброшена правильная ошибка.
await expectLater(
risky(), throwsA(isA<StateError>()));Потоки выдают много значений
Поток отправляет последовательность событий с течением времени. Его тестирование означает проверку всей последовательности в правильном порядке.
Сопоставитель выдачи
Используйте сопоставитель выдачи, чтобы проверить следующее значение, которое производит поток, а emitsInOrder — для проверки ожидаемой последовательности.
await expectLater(
counter, emitsInOrder([1, 2, 3]));Сигнализируйте окончание
Сопоставитель emitsDone проверяет, что поток закрывается в ожидаемый момент, обнаруживая потоки, которые никогда не завершаются.
expectLater(ticks, emitsThrough(emitsDone));Ошибки потоков тоже важны
Объединяйте сопоставители с emitsError, чтобы ожидать ошибку в потоке и проверять, что ошибки приходят в виде событий.
emitsInOrder([1, emitsError(isException)]);Остерегайтесь ложных успехов
Распространённая ошибка: если забыть дождаться результата, тест завершится раньше времени и молча пройдёт. Всегда дожидайтесь асинхронной работы или возвращайте её результат.
Тайм-ауты спасают
Если асинхронный код зависает, средство запуска останавливает его. Для медленного теста можно настроить ожидание с помощью тайм-аута.
test('slow', () async { /* ... */ },
timeout: Timeout(Duration(seconds: 5)));Быстрая проверка
Как проверить, что поток выдаёт 1, 2, 3 по порядку?
Повторение
Вы дожидались асинхронных результатов, использовали expectLater с сопоставителями завершения и throwsA, а потоки проверяли с помощью сопоставителей выдачи. Теперь асинхронный код тестируется уверенно. 🌊
Часто задаваемые вопросы
Урок «Тестирование асинхронного кода и потоков» бесплатный?
Да — полный текст урока «Тестирование асинхронного кода и потоков» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Dart Academy, подпишись на CoddyKit PRO. Курс Dart Academy содержит 4 уроков всего.
Чему я научусь в уроке «Тестирование асинхронного кода и потоков»?
Ожидайте future и проверяйте последовательности событий Ты практикуешь Dart Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Dart Academy?
Предыдущий опыт не требуется. Dart Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Тестирование асинхронного кода и потоков»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Dart Academy?
Да. Каждый урок Dart Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Ваш первый тест и expect
- group, setUp и tearDown
- Тестирование асинхронного кода и потоков
- Моки, имитации и покрытие