Как обстоят дела с юнит тестами?
Что проверяют
Пишете ли вы тесты сами как часть работы или только слышали о них. По ответу видно, понимаете ли вы, что стоит тестировать и где проходит граница с интеграционными тестами. Следом часто просят описать конкретный тест, который поймал реальную ошибку.
Как отвечать
Отвечайте от своей практики, с инструментами и цифрами, которые сможете объяснить:
- стек: xUnit, NUnit или MSTest, для заглушек Moq или NSubstitute, покрытие через coverlet, запуск
dotnet testв CI на каждый pull request; - что покрываете: доменную логику, расчёты, валидацию, ветвления с граничными значениями. Тривиальные свойства и маппинг без логики обычно теста не стоят;
- как пишете: схема Arrange, Act, Assert, один сценарий на тест, имя вида
Calculate_ReturnsZero_WhenCartIsEmpty, параметризация через[Theory]и[InlineData]в xUnit или[TestCase]в NUnit; - граница: юнит-тест не ходит в сеть и базу, внешние зависимости скрыты за интерфейсами и подменяются. Работу с базой проверяют интеграционными тестами на
WebApplicationFactoryи Testcontainers с настоящим PostgreSQL или SQL Server; - случай из опыта: тест, который поймал регрессию, или рефакторинг, ставший безопасным благодаря покрытию.
Если тестов в прошлых проектах было мало, так и скажите и объясните почему: легаси без внедрения зависимостей, сроки, отсутствие CI. Потом покажите, что делали сами: выносили зависимости за интерфейсы, начинали с тестов на найденные баги. Такой рассказ звучит убедительнее выдуманного TDD на всех проектах.
Этот же вопрос полезно задать работодателю в конце собеседования: запускаются ли тесты в CI, блокируют ли они слияние и сколько длится прогон. Ответ многое скажет о состоянии кодовой базы.
Где спотыкаются
Называют круглые проценты вроде «ошибок стало на 30% меньше», а на вопрос, как это считали, ответа нет.
Мокают всё подряд, включая DbContext, или берут провайдер EF Core InMemory. Он не проверяет ограничения и транзакции как настоящая база, и тест зелёный там, где прод падает.
Тестируют детали реализации: проверяют порядок вызовов моков через Verify, и любой рефакторинг ломает десяток тестов без изменения поведения.