Тестирование
Пирамида тестов, xUnit/NUnit/MSTest, моки и стабы, интеграционные тесты с WebApplicationFactory и Testcontainers, TDD/BDD, mutation testing.
Хорошие тесты — это не процент покрытия, а уверенность при рефакторинге. На собеседовании спрашивают, как вы изолируете зависимости, как тестируете работу с базой и HTTP и чем интеграционный тест отличается от unit-теста.
- 1 Пирамида тестирования: Unit → Integration → E2E? Пирамида (Майк Кон): внизу — много быстрых и дешёвых unit-тестов, в середине — меньше интеграционных, наверху — немного медленных и хрупких E2E. Unit — логика одного кла… Junior5 мин
- 2 Что такое xUnit, NUnit, MSTest — основные отличия? Все три — полноценные фреймворки для .NET, запускаются через dotnet test, поддерживаются IDE и CI. Выбор чаще определяется привычками команды. xUnit — самый популярный в… Junior5 мин
- 3 Mock vs Stub vs Fake vs Spy — когда что использовать? Test double — общее название объектов-заменителей реальных зависимостей в тестах (термин Джерарда Месароша). Dummy — заглушка, которую передают, но не используют (параме… Junior6 мин
- 4 Как тестировать код с DI: TestServer, WebApplicationFactory? WebApplicationFactory<TEntryPoint> (пакет Microsoft.AspNetCore.Mvc.Testing) поднимает всё приложение в памяти: реальный Program.cs, DI, конфигурацию, middleware, маршрут… Middle6 мин
- 5 Как тестировать EF Core: InMemory vs реальная БД vs Testcontainers? InMemory-провайдер — быстрый, но не реляционный: нет транзакций, FK и уникальных ограничений, SQL-трансляции (запросы выполняются как LINQ-to-Objects), ExecuteUpdate/raw… Middle6 мин
- 6 AAA-паттерн (Arrange-Act-Assert)? AAA — структура теста из трёх частей: Arrange (подготовить объект, зависимости, данные), Act (выполнить одно действие), Assert (проверить результат). Цель — читаемость: … Junior5 мин
- 7 Что такое Mutation Testing? Mutation testing проверяет качество тестов, а не кода: инструмент вносит в код маленькие изменения (мутанты) — меняет > на >=, + на -, true на false, удаляет вызов — и з… Senior4 мин
- 8 TDD vs BDD — в чём разница, когда применять? TDD (Test-Driven Development) — техника разработки: сначала пишем падающий тест (Red), затем минимальный код, чтобы он прошёл (Green), затем улучшаем код (Refactor). Кор… Middle6 мин
- 9 Как тестировать асинхронный код в .NET? Тестовые методы — async Task (не async void!), внутри — await. Все фреймворки (xUnit, NUnit, MSTest) ждут завершения Task. Никогда .Result / .Wait() в тестах — риск dead… Middle5 мин
- 10 Code Coverage — что измеряет и что не измеряет? Code coverage — доля кода, выполненного во время тестов. Виды: line (строки), branch (ветки if/switch/&&/?:), method, statement. Инструменты .NET: Coverlet (сбор, --coll… Junior5 мин