💡 Инструкция: Выберите один ответ из пяти. На работу отведено 85 минут. В заданиях с кодом опирайтесь на показанный фрагмент и наблюдаемое поведение; в ситуационных — на публичный договор и последствия решения.
Вопрос 1 из 30
Что в поведении этого кода гарантировано правилами темы «Слои», а не случайно совпало в одном запуске?
Dart Dart · Слои · семантика Копировать
final class LoadDashboard {
LoadDashboard(this.orders, this.clock);
final OrderRepository orders;
final Clock clock;
Future<Dashboard> call(UserId user) async {
final items = await orders.recentFor(user, since: clock.now().subtract(const Duration(days: 30)));
return Dashboard.fromOrders(items);
}
}
// Контекст задания: проверка семантики фрагмента.
Слои разделяют правила предметной области, координацию сценариев и внешние детали; зависимость направляют к устойчивой модели, а не к виджетам и HTTP-клиенту.
Для «Слои» считать случаи «предметное правило в виджете, HTTP-модель в домене и зависимость внутреннего слоя от Flutter» эквивалентными, если программа не завершается аварийно.
Спорный результат «Слои» должен разбирать вызывающий код, поскольку компонент отвечает лишь за обычный путь. Различия между версиями SDK для «Слои» в этом выводе не учитываются.
Порядок внутренних вызовов «Слои» считать публичной гарантией, которую нельзя менять при рефакторинге. Вывод делают по поведению текущей реализации «Слои» на обычном входе.
Случай «зависимость внутреннего слоя от Flutter» объявить внутренней деталью «Слои», даже если клиент видит иной результат.
Вопрос 12 из 30
Код проходит обычный сценарий. Какие проверки по теме «Доменные модели» нужны, чтобы разные граничные исходы не слились в один?
Dart Dart · Доменные модели · границы Копировать
final class Order {
Order._(this.id, this.lines);
final OrderId id;
final List<OrderLine> lines;
Money get total => lines.fold(Money.zero, (sum, line) => sum + line.total);
static Order create(OrderId id, List<OrderLine> lines) {
if (lines.isEmpty) throw const EmptyOrder();
return Order._(id, List.unmodifiable(lines));
}
}
// Контекст задания: анализ граничных входов.
Развести по отдельным проверкам: транспортное nullable-поле в доменной модели, невозможное сочетание состояний и обход инварианта.
Для «Доменные модели» ограничиться случаем «транспортное nullable-поле в доменной модели», а остальные входы считать тем же классом отказа.
Во всех спорных входах «Доменные модели» проверять только отсутствие необработанного исключения, не сравнивая состояние.
Проверить для «Доменные модели» только самый сложный случай «обход инварианта», считая остальные границы косвенно покрытыми.
Автоматизировать обычный путь «Доменные модели», а случай «обход инварианта» оставить в ручном чек-листе выпуска.
Вопрос 26 из 30
Обычный путь в коде зелёный. Как построить проверку «Стратегия тестирования», чтобы не пропустить различия между отказами?
Dart Dart · Стратегия тестирования · границы Копировать
test('domain rejects an order without lines', () {
expect(() => Order.create(OrderId('o-1'), const []), throwsA(isA<EmptyOrder>()));
});
test('repository maps a server response to a domain order', () async { /* boundary test */ });
// Контекст задания: анализ граничных входов.
Проверить независимо друг от друга: чистое предметное правило, интеграция границы, виджетный сценарий и один критичный сквозной путь.
Во всех спорных входах «Стратегия тестирования» проверять только отсутствие необработанного исключения, не сравнивая состояние.
Объединить «чистое предметное правило» и «интеграция границы» в один тест «Стратегия тестирования» с общим ожидаемым исходом.
Для «Стратегия тестирования» ограничиться случаем «чистое предметное правило», а остальные входы считать тем же классом отказа.
Автоматизировать обычный путь «Стратегия тестирования», а случай «один критичный сквозной путь» оставить в ручном чек-листе выпуска.
Вопрос 27 из 30
Что здесь следует считать правилом «Стратегия тестирования», а что — лишь деталью текущей реализации?
Dart Dart · Стратегия тестирования · семантика Копировать
test('domain rejects an order without lines', () {
expect(() => Order.create(OrderId('o-1'), const []), throwsA(isA<EmptyOrder>()));
});
test('repository maps a server response to a domain order', () async { /* boundary test */ });
// Контекст задания: проверка семантики фрагмента.
Стратегия тестирования сочетает быстрые тесты правил, проверки интеграции границ и небольшой набор сквозных сценариев, а не пытается всё доказать одним видом теста.
Случай «один критичный сквозной путь» объявить внутренней деталью «Стратегия тестирования», даже если клиент видит иной результат.
Спорный результат «Стратегия тестирования» должен разбирать вызывающий код, поскольку компонент отвечает лишь за обычный путь.
Для «Стратегия тестирования» считать случаи «чистое предметное правило, интеграция границы, виджетный сценарий и один критичный сквозной путь» эквивалентными, если программа не завершается аварийно.
Порядок внутренних вызовов «Стратегия тестирования» считать публичной гарантией, которую нельзя менять при рефакторинге.