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

Управление состоянием во Flutter

Тест по теме «Управление состоянием во Flutter» охватывает «Локальное состояние», «Состояние на ChangeNotifier», «Потоки состояния», «Границы слоя» и «Контроль состояния». В 25 вопросах нужно читать код, различать граничные случаи, выбирать место исправления, формулировать внешний договор и проектировать регрессионную проверку. Заданий с фрагментами кода — 15; в каждом вопросе один правильный ответ из пяти.

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На работу отведено 70 минут. В заданиях с кодом опирайтесь на показанный фрагмент и наблюдаемое поведение; в ситуационных — на публичный договор и последствия решения.
Вопрос 1 из 25
Несколько мест использования повторяют одну и ту же защиту. Какая правка должна стать единой для темы «Локальное состояние»?
DartDart · Локальное состояние · исправление
class _CounterState extends State<Counter> {
  int value = 0;

  void increment() => setState(() => value++);

  @override
  Widget build(BuildContext context) => TextButton(
    onPressed: increment,
    child: Text('$value'),
  );
}

// Контекст задания: выбор места исправления.
Вопрос 2 из 25
Какой тезис о коде «Локальное состояние» можно защитить без ссылки на удачный тестовый запуск?
DartDart · Локальное состояние · семантика
class _CounterState extends State<Counter> {
  int value = 0;

  void increment() => setState(() => value++);

  @override
  Widget build(BuildContext context) => TextButton(
    onPressed: increment,
    child: Text('$value'),
  );
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 3 из 25
Команда хочет сократить набор проверок для «Локальное состояние» до одного сценария. Какой вариант сохраняет важные различия?
DartDart · Локальное состояние · границы
class _CounterState extends State<Counter> {
  int value = 0;

  void increment() => setState(() => value++);

  @override
  Widget build(BuildContext context) => TextButton(
    onPressed: increment,
    child: Text('$value'),
  );
}

// Контекст задания: анализ граничных входов.
Вопрос 4 из 25
После исправления темы «Локальное состояние» нужен тест, который переживёт рефакторинг. Что следует закрепить?
Вопрос 5 из 25
Внутреннее устройство решения «Локальное состояние» меняется. Какой внешний договор обязан сохраниться?
Вопрос 6 из 25
Обычный путь в коде зелёный. Как построить проверку «Состояние на ChangeNotifier», чтобы не пропустить различия между отказами?
DartDart · Состояние на ChangeNotifier · границы
final class CartModel extends ChangeNotifier {
  final List<Item> _items = [];
  List<Item> get items => List.unmodifiable(_items);

  void add(Item item) {
    _items.add(item);
    notifyListeners();
  }
}

// Контекст задания: анализ граничных входов.
Вопрос 7 из 25
Несколько мест использования повторяют одну и ту же защиту. Какая правка должна стать единой для темы «Состояние на ChangeNotifier»?
DartDart · Состояние на ChangeNotifier · исправление
final class CartModel extends ChangeNotifier {
  final List<Item> _items = [];
  List<Item> get items => List.unmodifiable(_items);

  void add(Item item) {
    _items.add(item);
    notifyListeners();
  }
}

// Контекст задания: выбор места исправления.
Вопрос 8 из 25
Какой тезис о коде «Состояние на ChangeNotifier» можно защитить без ссылки на удачный тестовый запуск?
DartDart · Состояние на ChangeNotifier · семантика
final class CartModel extends ChangeNotifier {
  final List<Item> _items = [];
  List<Item> get items => List.unmodifiable(_items);

  void add(Item item) {
    _items.add(item);
    notifyListeners();
  }
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 9 из 25
Какой договор позволяет тестировать «Состояние на ChangeNotifier» через результат, а не через приватные детали?
Вопрос 10 из 25
После исправления темы «Состояние на ChangeNotifier» нужен тест, который переживёт рефакторинг. Что следует закрепить?
Вопрос 11 из 25
Фрагмент выглядит убедительно на типичных данных. Какие входы по теме «Потоки состояния» нельзя проверять одним общим ожиданием?
DartDart · Потоки состояния · границы
Widget build(BuildContext context) {
  return StreamBuilder<SessionState>(
    stream: sessions.states,
    initialData: const SessionState.loading(),
    builder: (_, snapshot) => SessionView(state: snapshot.requireData),
  );
}

// Контекст задания: анализ граничных входов.
Вопрос 12 из 25
Какое описание семантики показанного решения по теме «Потоки состояния» является точным?
DartDart · Потоки состояния · семантика
Widget build(BuildContext context) {
  return StreamBuilder<SessionState>(
    stream: sessions.states,
    initialData: const SessionState.loading(),
    builder: (_, snapshot) => SessionView(state: snapshot.requireData),
  );
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 13 из 25
Несколько мест использования повторяют одну и ту же защиту. Какая правка должна стать единой для темы «Потоки состояния»?
DartDart · Потоки состояния · исправление
Widget build(BuildContext context) {
  return StreamBuilder<SessionState>(
    stream: sessions.states,
    initialData: const SessionState.loading(),
    builder: (_, snapshot) => SessionView(state: snapshot.requireData),
  );
}

// Контекст задания: выбор места исправления.
Вопрос 14 из 25
Что добавить в набор тестов, чтобы ошибка по теме «Потоки состояния» не вернулась незаметно?
Вопрос 15 из 25
Какой договор позволяет тестировать «Потоки состояния» через результат, а не через приватные детали?
Вопрос 16 из 25
Какой вывод о фрагменте «Границы слоя» останется верным после безопасного рефакторинга?
DartDart · Границы слоя · семантика
final class OrdersViewModel extends ChangeNotifier {
  OrdersViewModel(this.repository);
  final OrderRepository repository;
  OrdersState state = const OrdersState.loading();

  Future<void> reload() async {
    state = const OrdersState.loading();
    notifyListeners();
    state = await repository.load().then(OrdersState.data, onError: OrdersState.error);
    notifyListeners();
  }
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 17 из 25
Фрагмент допускает частный обход спорного случая. Как перенести ответственность туда, где определяется правило «Границы слоя»?
DartDart · Границы слоя · исправление
final class OrdersViewModel extends ChangeNotifier {
  OrdersViewModel(this.repository);
  final OrderRepository repository;
  OrdersState state = const OrdersState.loading();

  Future<void> reload() async {
    state = const OrdersState.loading();
    notifyListeners();
    state = await repository.load().then(OrdersState.data, onError: OrdersState.error);
    notifyListeners();
  }
}

// Контекст задания: выбор места исправления.
Вопрос 18 из 25
Обычный путь в коде зелёный. Как построить проверку «Границы слоя», чтобы не пропустить различия между отказами?
DartDart · Границы слоя · границы
final class OrdersViewModel extends ChangeNotifier {
  OrdersViewModel(this.repository);
  final OrderRepository repository;
  OrdersState state = const OrdersState.loading();

  Future<void> reload() async {
    state = const OrdersState.loading();
    notifyListeners();
    state = await repository.load().then(OrdersState.data, onError: OrdersState.error);
    notifyListeners();
  }
}

// Контекст задания: анализ граничных входов.
Вопрос 19 из 25
Команда хочет свободно менять устройство решения «Границы слоя». Какое требование нельзя нарушить?
Вопрос 20 из 25
Что добавить в набор тестов, чтобы ошибка по теме «Границы слоя» не вернулась незаметно?
Вопрос 21 из 25
Что в поведении этого кода гарантировано правилами темы «Контроль состояния», а не случайно совпало в одном запуске?
DartDart · Контроль состояния · семантика
sealed class LoadState<T> {
  const LoadState();
}
final class Loading<T> extends LoadState<T> { const Loading(); }
final class Data<T> extends LoadState<T> { const Data(this.value); final T value; }
final class Failed<T> extends LoadState<T> { const Failed(this.error); final Object error; }

// Контекст задания: проверка семантики фрагмента.
Вопрос 22 из 25
На ревью спорят, достаточно ли одного сквозного теста для «Контроль состояния». Какой набор действительно раскрывает границы поведения?
DartDart · Контроль состояния · границы
sealed class LoadState<T> {
  const LoadState();
}
final class Loading<T> extends LoadState<T> { const Loading(); }
final class Data<T> extends LoadState<T> { const Data(this.value); final T value; }
final class Failed<T> extends LoadState<T> { const Failed(this.error); final Object error; }

// Контекст задания: анализ граничных входов.
Вопрос 23 из 25
Фрагмент допускает частный обход спорного случая. Как перенести ответственность туда, где определяется правило «Контроль состояния»?
DartDart · Контроль состояния · исправление
sealed class LoadState<T> {
  const LoadState();
}
final class Loading<T> extends LoadState<T> { const Loading(); }
final class Data<T> extends LoadState<T> { const Data(this.value); final T value; }
final class Failed<T> extends LoadState<T> { const Failed(this.error); final Object error; }

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

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

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

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

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