💡 Инструкция: Выберите один ответ из пяти. На работу отведено 70 минут. В заданиях с кодом опирайтесь на показанный фрагмент и наблюдаемое поведение; в ситуационных — на публичный договор и последствия решения.
Вопрос 21 из 25
После одного успешного запуска фрагмент признали готовым. Какой набор случаев по теме «Ошибки интеграции» всё ещё нужно проверить раздельно?
Dart Dart · Ошибки интеграции · границы Копировать
Future<WorkerHandle> spawnWorker() async {
final ready = ReceivePort();
final errors = ReceivePort();
final exits = ReceivePort();
final isolate = await Isolate.spawn(
workerMain,
ready.sendPort,
onError: errors.sendPort,
onExit: exits.sendPort,
);
return WorkerHandle(isolate, ready, errors, exits);
}
// Контекст задания: анализ граничных входов.
Объединить «ошибка рабочего изолята» и «завершение без ответа» в один тест «Ошибки интеграции» с общим ожидаемым исходом.
Для «Ошибки интеграции» ограничиться случаем «ошибка рабочего изолята», а остальные входы считать тем же классом отказа.
Задать самостоятельные ожидания для случаев: ошибка рабочего изолята, завершение без ответа, потерянная корреляция и отказ при создании.
Проверить для «Ошибки интеграции» только самый сложный случай «отказ при создании», считая остальные границы косвенно покрытыми.
Во всех спорных входах «Ошибки интеграции» проверять только отсутствие необработанного исключения, не сравнивая состояние.
Вопрос 22 из 25
На ревью просят не размножать проверки по вызывающему коду. Какое исправление для «Ошибки интеграции» отвечает этому требованию?
Dart Dart · Ошибки интеграции · исправление Копировать
Future<WorkerHandle> spawnWorker() async {
final ready = ReceivePort();
final errors = ReceivePort();
final exits = ReceivePort();
final isolate = await Isolate.spawn(
workerMain,
ready.sendPort,
onError: errors.sendPort,
onExit: exits.sendPort,
);
return WorkerHandle(isolate, ready, errors, exits);
}
// Контекст задания: выбор места исправления.
Перенести проверку «Ошибки интеграции» в тестовый код, не меняя производственную реализацию.
Подключить отдельные порты ошибок и завершения, связывая каждый отказ с исходным запросом.
Скопировать защиту «Ошибки интеграции» во все найденные места вызова и считать повторение единым исправлением.
Оставить поведение «Ошибки интеграции» прежним, но заменить сообщение об ошибке на более подробное.
Скрыть сбой «Ошибки интеграции» автоматической повторной попыткой без ограничения числа запусков.
Вопрос 23 из 25
На какую гарантию языка или интерфейса можно опереться при разборе этого кода по теме «Ошибки интеграции»?
Dart Dart · Ошибки интеграции · семантика Копировать
Future<WorkerHandle> spawnWorker() async {
final ready = ReceivePort();
final errors = ReceivePort();
final exits = ReceivePort();
final isolate = await Isolate.spawn(
workerMain,
ready.sendPort,
onError: errors.sendPort,
onExit: exits.sendPort,
);
return WorkerHandle(isolate, ready, errors, exits);
}
// Контекст задания: проверка семантики фрагмента.
Протокол сообщений должен быть версионированным и типобезопасным на границе; позиционный список из `dynamic` легко перепутать и трудно диагностировать.
Спорный результат «Ошибки интеграции» должен разбирать вызывающий код, поскольку компонент отвечает лишь за обычный путь.
Случай «отказ при создании» объявить внутренней деталью «Ошибки интеграции», даже если клиент видит иной результат.
Порядок внутренних вызовов «Ошибки интеграции» считать публичной гарантией, которую нельзя менять при рефакторинге.
Для «Ошибки интеграции» считать случаи «ошибка рабочего изолята, завершение без ответа, потерянная корреляция и отказ при создании» эквивалентными, если программа не завершается аварийно.