DT Dart  ·  25 вопросов  ·  ~70 мин  ·  ⏱ Таймер 10:00  ·  Средний  · 

HTTP-клиент и работа с API

Тест по теме «HTTP-клиент и работа с API» охватывает «Запросы», «Заголовки», «Тайм-ауты», «Обработка статусов» и «Читаемость решения». В 25 вопросах нужно читать код, различать граничные случаи, выбирать место исправления, формулировать внешний договор и проектировать регрессионную проверку. Заданий с фрагментами кода — 15; в каждом вопросе один правильный ответ из пяти.

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На работу отведено 70 минут. В заданиях с кодом опирайтесь на показанный фрагмент и наблюдаемое поведение; в ситуационных — на публичный договор и последствия решения.
Вопрос 1 из 25
Какой вывод о фрагменте «Запросы» останется верным после безопасного рефакторинга?
DartDart · Запросы · семантика
Future<Response> loadOrder(String rawId) {
  final uri = baseUri.replace(
    pathSegments: [...baseUri.pathSegments, 'orders', rawId],
    queryParameters: {'include': 'items'},
  );
  return client.get(uri);
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 2 из 25
Фрагмент выглядит убедительно на типичных данных. Какие входы по теме «Запросы» нельзя проверять одним общим ожиданием?
DartDart · Запросы · границы
Future<Response> loadOrder(String rawId) {
  final uri = baseUri.replace(
    pathSegments: [...baseUri.pathSegments, 'orders', rawId],
    queryParameters: {'include': 'items'},
  );
  return client.get(uri);
}

// Контекст задания: анализ граничных входов.
Вопрос 3 из 25
Какое изменение показанного кода исправляет правило «Запросы», а не маскирует один его симптом?
DartDart · Запросы · исправление
Future<Response> loadOrder(String rawId) {
  final uri = baseUri.replace(
    pathSegments: [...baseUri.pathSegments, 'orders', rawId],
    queryParameters: {'include': 'items'},
  );
  return client.get(uri);
}

// Контекст задания: выбор места исправления.
Вопрос 4 из 25
Какой сценарий должен стать постоянной проверкой после исправления «Запросы»?
Вопрос 5 из 25
Что должно оставаться неизменным при замене реализации темы «Запросы»?
Вопрос 6 из 25
Локальная заплатка помогла только одному клиенту этого кода. Какая правка устраняет причину в теме «Заголовки»?
DartDart · Заголовки · исправление
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()),
  );
}

// Контекст задания: выбор места исправления.
Вопрос 7 из 25
На ревью спорят, достаточно ли одного сквозного теста для «Заголовки». Какой набор действительно раскрывает границы поведения?
DartDart · Заголовки · границы
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()),
  );
}

// Контекст задания: анализ граничных входов.
Вопрос 8 из 25
На какую гарантию языка или интерфейса можно опереться при разборе этого кода по теме «Заголовки»?
DartDart · Заголовки · семантика
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()),
  );
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 9 из 25
Какой контракт по теме «Заголовки» отделяет наблюдаемое поведение от внутренних шагов?
Вопрос 10 из 25
Какой сценарий должен стать постоянной проверкой после исправления «Заголовки»?
Вопрос 11 из 25
В показанном решении проблему обходят рядом с одним вызовом. Какое изменение исправляет саму границу темы «Тайм-ауты»?
DartDart · Тайм-ауты · исправление
Future<Response> loadFeed() async {
  try {
    return await client
        .get(baseUri.resolve('/feed'))
        .timeout(const Duration(seconds: 8));
  } on TimeoutException {
    throw const FeedUnavailable(reason: 'timeout');
  }
}

// Контекст задания: выбор места исправления.
Вопрос 12 из 25
Что в поведении этого кода гарантировано правилами темы «Тайм-ауты», а не случайно совпало в одном запуске?
DartDart · Тайм-ауты · семантика
Future<Response> loadFeed() async {
  try {
    return await client
        .get(baseUri.resolve('/feed'))
        .timeout(const Duration(seconds: 8));
  } on TimeoutException {
    throw const FeedUnavailable(reason: 'timeout');
  }
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 13 из 25
На ревью спорят, достаточно ли одного сквозного теста для «Тайм-ауты». Какой набор действительно раскрывает границы поведения?
DartDart · Тайм-ауты · границы
Future<Response> loadFeed() async {
  try {
    return await client
        .get(baseUri.resolve('/feed'))
        .timeout(const Duration(seconds: 8));
  } on TimeoutException {
    throw const FeedUnavailable(reason: 'timeout');
  }
}

// Контекст задания: анализ граничных входов.
Вопрос 14 из 25
Перед обновлением зависимости нужно защитить исправление «Тайм-ауты». Какая проверка подходит лучше всего?
Вопрос 15 из 25
Какой контракт по теме «Тайм-ауты» отделяет наблюдаемое поведение от внутренних шагов?
Вопрос 16 из 25
Команда хочет сократить набор проверок для «Обработка статусов» до одного сценария. Какой вариант сохраняет важные различия?
DartDart · Обработка статусов · границы
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),
  };
}

// Контекст задания: анализ граничных входов.
Вопрос 17 из 25
В показанном решении проблему обходят рядом с одним вызовом. Какое изменение исправляет саму границу темы «Обработка статусов»?
DartDart · Обработка статусов · исправление
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),
  };
}

// Контекст задания: выбор места исправления.
Вопрос 18 из 25
Что в поведении этого кода гарантировано правилами темы «Обработка статусов», а не случайно совпало в одном запуске?
DartDart · Обработка статусов · семантика
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),
  };
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 19 из 25
Как сформулировать публичное обещание темы «Обработка статусов», не привязывая клиента к конкретному классу?
Вопрос 20 из 25
Перед обновлением зависимости нужно защитить исправление «Обработка статусов». Какая проверка подходит лучше всего?
Вопрос 21 из 25
Код прошёл демонстрационный пример, но границы не разобраны. Что нужно проверить отдельно в теме «Читаемость решения»?
DartDart · Читаемость решения · границы
Future<OrderResult> loadOrder(OrderId id) async {
  final response = await transport.get('/orders/${id.value}');
  final payload = decoder.decodeObject(response.body);
  return mapper.toOrderResult(response.statusCode, payload);
}

// Контекст задания: анализ граничных входов.
Вопрос 22 из 25
Какое утверждение корректно связывает показанный код с семантикой темы «Читаемость решения»?
DartDart · Читаемость решения · семантика
Future<OrderResult> loadOrder(OrderId id) async {
  final response = await transport.get('/orders/${id.value}');
  final payload = decoder.decodeObject(response.body);
  return mapper.toOrderResult(response.statusCode, payload);
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 23 из 25
В показанном решении проблему обходят рядом с одним вызовом. Какое изменение исправляет саму границу темы «Читаемость решения»?
DartDart · Читаемость решения · исправление
Future<OrderResult> loadOrder(OrderId id) async {
  final response = await transport.get('/orders/${id.value}');
  final payload = decoder.decodeObject(response.body);
  return mapper.toOrderResult(response.statusCode, payload);
}

// Контекст задания: выбор места исправления.
Вопрос 24 из 25
Ручная проверка по теме «Читаемость решения» прошла. Как превратить её в полезную автоматическую регрессию?
Вопрос 25 из 25
Как сформулировать публичное обещание темы «Читаемость решения», не привязывая клиента к конкретному классу?

Ответьте на все 25 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу