Где пишутся юнит-тесты
Что проверяют
Понимаете ли вы, кто отвечает за модульные тесты и где они живут относительно кода. Для QA вопрос с подвохом: интервьюер ждёт, что вы отличите юнит-тесты разработчиков от своих автотестов на API и UI. Следом спрашивают, какое место они занимают в пирамиде тестирования и как вы на них опираетесь.
Как отвечать
Юнит-тесты пишут разработчики, в том же репозитории, что и код, и почти всегда рядом с ним. Тест проверяет одну функцию или класс в изоляции, внешние зависимости заменяются моками. Раскладка зависит от языка:
- Java: Maven и Gradle ждут тесты в
src/test/java, пакеты повторяютsrc/main/java, фреймворк JUnit 5, моки через Mockito; - Python: каталог
tests/и файлыtest_*.py, которые находит pytest; - JavaScript и TypeScript:
*.test.tsрядом с модулем или папка__tests__, Jest или Vitest; - Go: файл
*_test.goв том же пакете, запуск черезgo test; - C#: отдельный проект вроде
MyApp.Testsв том же решении, xUnit или NUnit.
Запускаются они локально и в CI на каждый коммит или пулл-реквест, красный прогон блокирует слияние. Их должно быть больше всего: они быстрые и дешёвые.
Дальше покажите свою роль. QA обычно не пишет юнит-тесты, но смотрит отчёт покрытия (JaCoCo, coverage.py, флаг --coverage в Jest), обсуждает с разработчиками, какие ветки логики не закрыты, и не дублирует в UI то, что уже проверено уровнем ниже. Если вы писали юнит-тесты сами, скажите, на каком стеке и что проверяли.
Где спотыкаются
Называют юнит-тестами проверки в Postman или UI-сценарии на Selenium. Это API и end-to-end тесты, у них другая скорость, стоимость и назначение.
Говорят, что юнит-тесты лежат в отдельном репозитории QA. Они версионируются вместе с кодом, иначе тест и код быстро разъедутся.
Считают модульным тест с настоящей базой или сетью. Как только появился внешний ресурс, это уже интеграционный тест.