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

JSON и сериализация моделей

Тест по теме «JSON и сериализация моделей» охватывает «Ручное преобразование», «Генерация кода», «Nullable-поля», «Совместимость схем» и «Диагностика результата». В 25 вопросах нужно читать код, различать граничные случаи, выбирать место исправления, формулировать внешний договор и проектировать регрессионную проверку. Заданий с фрагментами кода — 15; в каждом вопросе один правильный ответ из пяти.

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На работу отведено 70 минут. В заданиях с кодом опирайтесь на показанный фрагмент и наблюдаемое поведение; в ситуационных — на публичный договор и последствия решения.
Вопрос 1 из 25
Текущая защита работает лишь в одном сценарии. Что следует изменить в самом решении по теме «Ручное преобразование»?
DartDart · Ручное преобразование · исправление
final class Profile {
  const Profile({required this.id, required this.name, this.age});
  final String id;
  final String name;
  final int? age;

  factory Profile.fromJson(Map<String, Object?> json) {
    final id = json['id'];
    final name = json['name'];
    if (id is! String || name is! String) {
      throw const FormatException('invalid profile');
    }
    return Profile(id: id, name: name, age: json['age'] as int?);
  }
}

// Контекст задания: выбор места исправления.
Вопрос 2 из 25
Команда хочет сократить набор проверок для «Ручное преобразование» до одного сценария. Какой вариант сохраняет важные различия?
DartDart · Ручное преобразование · границы
final class Profile {
  const Profile({required this.id, required this.name, this.age});
  final String id;
  final String name;
  final int? age;

  factory Profile.fromJson(Map<String, Object?> json) {
    final id = json['id'];
    final name = json['name'];
    if (id is! String || name is! String) {
      throw const FormatException('invalid profile');
    }
    return Profile(id: id, name: name, age: json['age'] as int?);
  }
}

// Контекст задания: анализ граничных входов.
Вопрос 3 из 25
Какое утверждение о показанном фрагменте и теме «Ручное преобразование» опирается на реальную гарантию Dart или используемого интерфейса?
DartDart · Ручное преобразование · семантика
final class Profile {
  const Profile({required this.id, required this.name, this.age});
  final String id;
  final String name;
  final int? age;

  factory Profile.fromJson(Map<String, Object?> json) {
    final id = json['id'];
    final name = json['name'];
    if (id is! String || name is! String) {
      throw const FormatException('invalid profile');
    }
    return Profile(id: id, name: name, age: json['age'] as int?);
  }
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 4 из 25
Внутреннее устройство решения «Ручное преобразование» меняется. Какой внешний договор обязан сохраниться?
Вопрос 5 из 25
Какой тест действительно поймает возврат дефекта в теме «Ручное преобразование»?
Вопрос 6 из 25
Несколько мест использования повторяют одну и ту же защиту. Какая правка должна стать единой для темы «Генерация кода»?
DartDart · Генерация кода · исправление
@JsonSerializable()
final class InvoiceDto {
  const InvoiceDto({required this.id, required this.total});
  final String id;
  final int total;

  factory InvoiceDto.fromJson(Map<String, dynamic> json) =>
      _$InvoiceDtoFromJson(json);
  Map<String, dynamic> toJson() => _$InvoiceDtoToJson(this);
}

// Контекст задания: выбор места исправления.
Вопрос 7 из 25
Какой тезис о коде «Генерация кода» можно защитить без ссылки на удачный тестовый запуск?
DartDart · Генерация кода · семантика
@JsonSerializable()
final class InvoiceDto {
  const InvoiceDto({required this.id, required this.total});
  final String id;
  final int total;

  factory InvoiceDto.fromJson(Map<String, dynamic> json) =>
      _$InvoiceDtoFromJson(json);
  Map<String, dynamic> toJson() => _$InvoiceDtoToJson(this);
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 8 из 25
Команда хочет сократить набор проверок для «Генерация кода» до одного сценария. Какой вариант сохраняет важные различия?
DartDart · Генерация кода · границы
@JsonSerializable()
final class InvoiceDto {
  const InvoiceDto({required this.id, required this.total});
  final String id;
  final int total;

  factory InvoiceDto.fromJson(Map<String, dynamic> json) =>
      _$InvoiceDtoFromJson(json);
  Map<String, dynamic> toJson() => _$InvoiceDtoToJson(this);
}

// Контекст задания: анализ граничных входов.
Вопрос 9 из 25
После исправления темы «Генерация кода» нужен тест, который переживёт рефакторинг. Что следует закрепить?
Вопрос 10 из 25
Внутреннее устройство решения «Генерация кода» меняется. Какой внешний договор обязан сохраниться?
Вопрос 11 из 25
Обычный путь в коде зелёный. Как построить проверку «Nullable-поля», чтобы не пропустить различия между отказами?
DartDart · Nullable-поля · границы
final class UserDto {
  const UserDto({required this.id, this.nickname});
  final String id;
  final String? nickname;

  factory UserDto.fromJson(Map<String, Object?> json) {
    if (!json.containsKey('id')) throw const FormatException('id missing');
    return UserDto(id: json['id'] as String, nickname: json['nickname'] as String?);
  }
}

// Контекст задания: анализ граничных входов.
Вопрос 12 из 25
Несколько мест использования повторяют одну и ту же защиту. Какая правка должна стать единой для темы «Nullable-поля»?
DartDart · Nullable-поля · исправление
final class UserDto {
  const UserDto({required this.id, this.nickname});
  final String id;
  final String? nickname;

  factory UserDto.fromJson(Map<String, Object?> json) {
    if (!json.containsKey('id')) throw const FormatException('id missing');
    return UserDto(id: json['id'] as String, nickname: json['nickname'] as String?);
  }
}

// Контекст задания: выбор места исправления.
Вопрос 13 из 25
Какой тезис о коде «Nullable-поля» можно защитить без ссылки на удачный тестовый запуск?
DartDart · Nullable-поля · семантика
final class UserDto {
  const UserDto({required this.id, this.nickname});
  final String id;
  final String? nickname;

  factory UserDto.fromJson(Map<String, Object?> json) {
    if (!json.containsKey('id')) throw const FormatException('id missing');
    return UserDto(id: json['id'] as String, nickname: json['nickname'] as String?);
  }
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 14 из 25
Какой договор позволяет тестировать «Nullable-поля» через результат, а не через приватные детали?
Вопрос 15 из 25
После исправления темы «Nullable-поля» нужен тест, который переживёт рефакторинг. Что следует закрепить?
Вопрос 16 из 25
Фрагмент выглядит убедительно на типичных данных. Какие входы по теме «Совместимость схем» нельзя проверять одним общим ожиданием?
DartDart · Совместимость схем · границы
Map<String, Object?> migratePayload(Map<String, Object?> source) {
  final version = source['schemaVersion'] as int? ?? 1;
  return switch (version) {
    1 => {...source, 'displayName': source['name'], 'schemaVersion': 2},
    2 => source,
    _ => throw FormatException('unsupported schema $version'),
  };
}

// Контекст задания: анализ граничных входов.
Вопрос 17 из 25
Какое описание семантики показанного решения по теме «Совместимость схем» является точным?
DartDart · Совместимость схем · семантика
Map<String, Object?> migratePayload(Map<String, Object?> source) {
  final version = source['schemaVersion'] as int? ?? 1;
  return switch (version) {
    1 => {...source, 'displayName': source['name'], 'schemaVersion': 2},
    2 => source,
    _ => throw FormatException('unsupported schema $version'),
  };
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 18 из 25
Несколько мест использования повторяют одну и ту же защиту. Какая правка должна стать единой для темы «Совместимость схем»?
DartDart · Совместимость схем · исправление
Map<String, Object?> migratePayload(Map<String, Object?> source) {
  final version = source['schemaVersion'] as int? ?? 1;
  return switch (version) {
    1 => {...source, 'displayName': source['name'], 'schemaVersion': 2},
    2 => source,
    _ => throw FormatException('unsupported schema $version'),
  };
}

// Контекст задания: выбор места исправления.
Вопрос 19 из 25
Что добавить в набор тестов, чтобы ошибка по теме «Совместимость схем» не вернулась незаметно?
Вопрос 20 из 25
Какой договор позволяет тестировать «Совместимость схем» через результат, а не через приватные детали?
Вопрос 21 из 25
Какой вывод о фрагменте «Диагностика результата» останется верным после безопасного рефакторинга?
DartDart · Диагностика результата · семантика
Profile decodeProfile(String body, Uri source) {
  try {
    final value = jsonDecode(body);
    if (value is! Map<String, Object?>) {
      throw const FormatException('object expected');
    }
    return Profile.fromJson(value);
  } on FormatException catch (error, stack) {
    Error.throwWithStackTrace(ProfileDecodeException(source, error), stack);
  }
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 22 из 25
Фрагмент допускает частный обход спорного случая. Как перенести ответственность туда, где определяется правило «Диагностика результата»?
DartDart · Диагностика результата · исправление
Profile decodeProfile(String body, Uri source) {
  try {
    final value = jsonDecode(body);
    if (value is! Map<String, Object?>) {
      throw const FormatException('object expected');
    }
    return Profile.fromJson(value);
  } on FormatException catch (error, stack) {
    Error.throwWithStackTrace(ProfileDecodeException(source, error), stack);
  }
}

// Контекст задания: выбор места исправления.
Вопрос 23 из 25
Обычный путь в коде зелёный. Как построить проверку «Диагностика результата», чтобы не пропустить различия между отказами?
DartDart · Диагностика результата · границы
Profile decodeProfile(String body, Uri source) {
  try {
    final value = jsonDecode(body);
    if (value is! Map<String, Object?>) {
      throw const FormatException('object expected');
    }
    return Profile.fromJson(value);
  } on FormatException catch (error, stack) {
    Error.throwWithStackTrace(ProfileDecodeException(source, error), stack);
  }
}

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

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

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

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

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