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

Тестирование Dart-кода

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

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На работу отведено 70 минут. В заданиях с кодом опирайтесь на показанный фрагмент и наблюдаемое поведение; в ситуационных — на публичный договор и последствия решения.
Вопрос 1 из 25
Обычный путь в коде зелёный. Как построить проверку «Модульные тесты», чтобы не пропустить различия между отказами?
DartDart · Модульные тесты · границы
test('applies discount to eligible cart', () {
  final cart = Cart(items: [Item(price: 1200)], customer: Customer.loyal());
  final total = PriceCalculator().total(cart);
  expect(total, 1080);
});

// Контекст задания: анализ граничных входов.
Вопрос 2 из 25
Что здесь следует считать правилом «Модульные тесты», а что — лишь деталью текущей реализации?
DartDart · Модульные тесты · семантика
test('applies discount to eligible cart', () {
  final cart = Cart(items: [Item(price: 1200)], customer: Customer.loyal());
  final total = PriceCalculator().total(cart);
  expect(total, 1080);
});

// Контекст задания: проверка семантики фрагмента.
Вопрос 3 из 25
Текущая защита работает лишь в одном сценарии. Что следует изменить в самом решении по теме «Модульные тесты»?
DartDart · Модульные тесты · исправление
test('applies discount to eligible cart', () {
  final cart = Cart(items: [Item(price: 1200)], customer: Customer.loyal());
  final total = PriceCalculator().total(cart);
  expect(total, 1080);
});

// Контекст задания: выбор места исправления.
Вопрос 4 из 25
Какая регрессия для «Модульные тесты» будет падать на старом дефекте и не ломаться от безопасной перестройки кода?
Вопрос 5 из 25
Две реализации решают задачу «Модульные тесты» по-разному. Какое требование делает их взаимозаменяемыми для клиента?
Вопрос 6 из 25
На какую гарантию языка или интерфейса можно опереться при разборе этого кода по теме «Асинхронные проверки»?
DartDart · Асинхронные проверки · семантика
test('refresh waits for persisted session', () async {
  final repository = FakeSessionRepository();
  final service = SessionService(repository);
  await service.refresh('u-42');
  expect(repository.saved.single.userId, 'u-42');
});

// Контекст задания: проверка семантики фрагмента.
Вопрос 7 из 25
Какое изменение показанного кода исправляет правило «Асинхронные проверки», а не маскирует один его симптом?
DartDart · Асинхронные проверки · исправление
test('refresh waits for persisted session', () async {
  final repository = FakeSessionRepository();
  final service = SessionService(repository);
  await service.refresh('u-42');
  expect(repository.saved.single.userId, 'u-42');
});

// Контекст задания: выбор места исправления.
Вопрос 8 из 25
Для показанного решения написали один тест на успех. Какой набор граничных сценариев по теме «Асинхронные проверки» должен появиться рядом?
DartDart · Асинхронные проверки · границы
test('refresh waits for persisted session', () async {
  final repository = FakeSessionRepository();
  final service = SessionService(repository);
  await service.refresh('u-42');
  expect(repository.saved.single.userId, 'u-42');
});

// Контекст задания: анализ граничных входов.
Вопрос 9 из 25
Что должно оставаться неизменным при замене реализации темы «Асинхронные проверки»?
Вопрос 10 из 25
Какая регрессия для «Асинхронные проверки» будет падать на старом дефекте и не ломаться от безопасной перестройки кода?
Вопрос 11 из 25
Какой вывод о фрагменте «Подмены зависимостей» останется верным после безопасного рефакторинга?
DartDart · Подмены зависимостей · семантика
test('reports gateway refusal without charging twice', () async {
  final gateway = FakePaymentGateway()..next = const PaymentRefused();
  final checkout = Checkout(gateway);
  await expectLater(checkout.pay(order), throwsA(isA<CheckoutFailed>()));
  expect(gateway.calls, 1);
});

// Контекст задания: проверка семантики фрагмента.
Вопрос 12 из 25
Фрагмент выглядит убедительно на типичных данных. Какие входы по теме «Подмены зависимостей» нельзя проверять одним общим ожиданием?
DartDart · Подмены зависимостей · границы
test('reports gateway refusal without charging twice', () async {
  final gateway = FakePaymentGateway()..next = const PaymentRefused();
  final checkout = Checkout(gateway);
  await expectLater(checkout.pay(order), throwsA(isA<CheckoutFailed>()));
  expect(gateway.calls, 1);
});

// Контекст задания: анализ граничных входов.
Вопрос 13 из 25
Какое изменение показанного кода исправляет правило «Подмены зависимостей», а не маскирует один его симптом?
DartDart · Подмены зависимостей · исправление
test('reports gateway refusal without charging twice', () async {
  final gateway = FakePaymentGateway()..next = const PaymentRefused();
  final checkout = Checkout(gateway);
  await expectLater(checkout.pay(order), throwsA(isA<CheckoutFailed>()));
  expect(gateway.calls, 1);
});

// Контекст задания: выбор места исправления.
Вопрос 14 из 25
Какой сценарий должен стать постоянной проверкой после исправления «Подмены зависимостей»?
Вопрос 15 из 25
Что должно оставаться неизменным при замене реализации темы «Подмены зависимостей»?
Вопрос 16 из 25
Локальная заплатка помогла только одному клиенту этого кода. Какая правка устраняет причину в теме «Организация набора»?
DartDart · Организация набора · исправление
group('TokenCache', () {
  late FakeClock clock;
  late TokenCache cache;

  setUp(() {
    clock = FakeClock(DateTime.utc(2026, 1, 1));
    cache = TokenCache(clock);
  });

  test('expires token at deadline', () {
    cache.store('token', expiresAt: clock.now().add(const Duration(minutes: 5)));
    clock.advance(const Duration(minutes: 5));
    expect(cache.read(), isNull);
  });
});

// Контекст задания: выбор места исправления.
Вопрос 17 из 25
На ревью спорят, достаточно ли одного сквозного теста для «Организация набора». Какой набор действительно раскрывает границы поведения?
DartDart · Организация набора · границы
group('TokenCache', () {
  late FakeClock clock;
  late TokenCache cache;

  setUp(() {
    clock = FakeClock(DateTime.utc(2026, 1, 1));
    cache = TokenCache(clock);
  });

  test('expires token at deadline', () {
    cache.store('token', expiresAt: clock.now().add(const Duration(minutes: 5)));
    clock.advance(const Duration(minutes: 5));
    expect(cache.read(), isNull);
  });
});

// Контекст задания: анализ граничных входов.
Вопрос 18 из 25
На какую гарантию языка или интерфейса можно опереться при разборе этого кода по теме «Организация набора»?
DartDart · Организация набора · семантика
group('TokenCache', () {
  late FakeClock clock;
  late TokenCache cache;

  setUp(() {
    clock = FakeClock(DateTime.utc(2026, 1, 1));
    cache = TokenCache(clock);
  });

  test('expires token at deadline', () {
    cache.store('token', expiresAt: clock.now().add(const Duration(minutes: 5)));
    clock.advance(const Duration(minutes: 5));
    expect(cache.read(), isNull);
  });
});

// Контекст задания: проверка семантики фрагмента.
Вопрос 19 из 25
Какой контракт по теме «Организация набора» отделяет наблюдаемое поведение от внутренних шагов?
Вопрос 20 из 25
Какой сценарий должен стать постоянной проверкой после исправления «Организация набора»?
Вопрос 21 из 25
В показанном решении проблему обходят рядом с одним вызовом. Какое изменение исправляет саму границу темы «Проверка допущений»?
DartDart · Проверка допущений · исправление
test('rejects payload without required identifier', () {
  final payload = <String, Object?>{'name': 'Ada'};
  expect(() => UserDto.fromJson(payload), throwsFormatException);
});

// Контекст задания: выбор места исправления.
Вопрос 22 из 25
Что в поведении этого кода гарантировано правилами темы «Проверка допущений», а не случайно совпало в одном запуске?
DartDart · Проверка допущений · семантика
test('rejects payload without required identifier', () {
  final payload = <String, Object?>{'name': 'Ada'};
  expect(() => UserDto.fromJson(payload), throwsFormatException);
});

// Контекст задания: проверка семантики фрагмента.
Вопрос 23 из 25
На ревью спорят, достаточно ли одного сквозного теста для «Проверка допущений». Какой набор действительно раскрывает границы поведения?
DartDart · Проверка допущений · границы
test('rejects payload without required identifier', () {
  final payload = <String, Object?>{'name': 'Ada'};
  expect(() => UserDto.fromJson(payload), throwsFormatException);
});

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

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

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

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

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