💡 Инструкция: Выберите один ответ из пяти. На работу отведено 70 минут. В заданиях с кодом опирайтесь на показанный фрагмент и наблюдаемое поведение; в ситуационных — на публичный договор и последствия решения.
Вопрос 1 из 25
Какой вывод о фрагменте «Запросы» останется верным после безопасного рефакторинга?
Dart Dart · Запросы · семантика Копировать
Future<Response> loadOrder(String rawId) {
final uri = baseUri.replace(
pathSegments: [...baseUri.pathSegments, 'orders', rawId],
queryParameters: {'include': 'items'},
);
return client.get(uri);
}
// Контекст задания: проверка семантики фрагмента.
Случай «ошибочный HTTP-метод» объявить внутренней деталью «Запросы», даже если клиент видит иной результат. Предполагается, что компиляция уже подтверждает весь договор «Запросы».
Спорный результат «Запросы» должен разбирать вызывающий код, поскольку компонент отвечает лишь за обычный путь.
Для «Запросы» считать случаи «спецсимволы в сегменте пути, параметры запроса, пустое тело и ошибочный HTTP-метод» эквивалентными, если программа не завершается аварийно.
HTTP-запрос должен явно задавать метод, URI, кодирование тела и ожидаемый формат ответа; повторяемые операции безопаснее проектировать идемпотентными.
Порядок внутренних вызовов «Запросы» считать публичной гарантией, которую нельзя менять при рефакторинге. Клиенту «Запросы» предлагают самостоятельно уточнять смысл спорного результата.
Вопрос 7 из 25
На ревью спорят, достаточно ли одного сквозного теста для «Заголовки». Какой набор действительно раскрывает границы поведения?
Dart Dart · Заголовки · границы Копировать
Future<Response> createOrder(OrderDraft draft) async {
final token = await tokens.current();
return client.post(
baseUri.resolve('/orders'),
headers: {
'Authorization': 'Bearer $token',
'Content-Type': 'application/json',
'Accept': 'application/json',
},
body: jsonEncode(draft.toJson()),
);
}
// Контекст задания: анализ граничных входов.
Автоматизировать обычный путь «Заголовки», а случай «утечка авторизации при перенаправлении» оставить в ручном чек-листе выпуска.
Проверить независимо друг от друга: просроченный токен, отсутствие `Content-Type`, неверный `Accept` и утечка авторизации при перенаправлении.
Во всех спорных входах «Заголовки» проверять только отсутствие необработанного исключения, не сравнивая состояние.
Объединить «просроченный токен» и «отсутствие `Content-Type`» в один тест «Заголовки» с общим ожидаемым исходом.
Проверить для «Заголовки» только самый сложный случай «утечка авторизации при перенаправлении», считая остальные границы косвенно покрытыми.
Вопрос 8 из 25
На какую гарантию языка или интерфейса можно опереться при разборе этого кода по теме «Заголовки»?
Dart Dart · Заголовки · семантика Копировать
Future<Response> createOrder(OrderDraft draft) async {
final token = await tokens.current();
return client.post(
baseUri.resolve('/orders'),
headers: {
'Authorization': 'Bearer $token',
'Content-Type': 'application/json',
'Accept': 'application/json',
},
body: jsonEncode(draft.toJson()),
);
}
// Контекст задания: проверка семантики фрагмента.
Заголовки авторизации, типа содержимого и согласования формата имеют разные назначения; секретный токен нельзя помещать в адрес запроса или обычный журнал.
Для «Заголовки» считать случаи «просроченный токен, отсутствие `Content-Type`, неверный `Accept` и утечка авторизации при перенаправлении» эквивалентными, если программа не завершается аварийно.
Случай «утечка авторизации при перенаправлении» объявить внутренней деталью «Заголовки», даже если клиент видит иной результат.
Порядок внутренних вызовов «Заголовки» считать публичной гарантией, которую нельзя менять при рефакторинге. Вывод делают по поведению текущей реализации «Заголовки» на обычном входе.
Спорный результат «Заголовки» должен разбирать вызывающий код, поскольку компонент отвечает лишь за обычный путь.
Вопрос 16 из 25
Команда хочет сократить набор проверок для «Обработка статусов» до одного сценария. Какой вариант сохраняет важные различия?
Dart Dart · Обработка статусов · границы Копировать
OrderResult parseOrderResponse(Response response) {
return switch (response.statusCode) {
200 => OrderResult.found(Order.fromJson(jsonDecode(response.body))),
404 => const OrderResult.notFound(),
401 || 403 => const OrderResult.forbidden(),
_ => OrderResult.failed(status: response.statusCode),
};
}
// Контекст задания: анализ граничных входов.
Проверить для «Обработка статусов» только самый сложный случай «ошибочный статус с валидным телом», считая остальные границы косвенно покрытыми.
Автоматизировать обычный путь «Обработка статусов», а случай «ошибочный статус с валидным телом» оставить в ручном чек-листе выпуска.
Проверить входы «Обработка статусов» только на текущей реализации, не закрепляя результат как внешний договор.
Не объединять в один исход следующие случаи: ответы 204, 400, 401, 404, 500, успешный статус с ошибочным JSON и ошибочный статус с валидным телом.
Во всех спорных входах «Обработка статусов» проверять только отсутствие необработанного исключения, не сравнивая состояние.
Вопрос 18 из 25
Что в поведении этого кода гарантировано правилами темы «Обработка статусов», а не случайно совпало в одном запуске?
Dart Dart · Обработка статусов · семантика Копировать
OrderResult parseOrderResponse(Response response) {
return switch (response.statusCode) {
200 => OrderResult.found(Order.fromJson(jsonDecode(response.body))),
404 => const OrderResult.notFound(),
401 || 403 => const OrderResult.forbidden(),
_ => OrderResult.failed(status: response.statusCode),
};
}
// Контекст задания: проверка семантики фрагмента.
Спорный результат «Обработка статусов» должен разбирать вызывающий код, поскольку компонент отвечает лишь за обычный путь.
Коды 2xx, 4xx и 5xx несут разный смысл; успешный JSON-парсинг не превращает ответ 500 в успех, а 204 не обязан содержать тело.
Случай «ошибочный статус с валидным телом» объявить внутренней деталью «Обработка статусов», даже если клиент видит иной результат.
Порядок внутренних вызовов «Обработка статусов» считать публичной гарантией, которую нельзя менять при рефакторинге.
В теме «Обработка статусов» отсутствие предупреждения анализатора считать гарантией для любого допустимого входа.