Эта статья — не теоретическое руководство по написанию тестов и не how-to по использованию инструментария в определенном стеке, а ряд популярных вопросов, иногда даже у многих не сформировавшихся, на которые я постараюсь дать ответы. Источником этих вопросов служат коллеги, люди с обоих сторон в собеседованиях и знакомые, а ответы будут субъективными, краткими и не исчерпывающими, основанными на чужих материалах и своём опыте. Целевая аудитория статьи – разработчики, которые с определенным успехом пишут или хотя бы пытались писать тесты, но испытывают определенные сложности в их написании.
Я старался не привязываться к конкретному языку, чтобы увеличить охват читающих, однако оговорюсь сразу, что работаю в экосистеме PHP с использованием PHPUnit, и поэтому некоторые мои выводы могут быть неподходящими для других экосистем. При подборе вопросов и написанию я ориентировался на множество докладов и статей и пользовался ими как референсом.
Поводом для написания послужила недавняя статья «PHPUnit. Мокаем Doctrine Entity Manager» от trawl, некоторые проблемы из которой я тоже разберу.
Список вопросов:
- Писать или не писать тесты?
- А если на тесты не выделяют время?
- Виды тестирования, как выбрать?
- Почему мне сложно и долго писать тесты?
- Как тестировать приватные методы?
- Как писать интеграционные тесты? Как тестировать базу?
- Как правильно: интеграционные или функциональные?
- Как быть с внешними зависимостями?
- Как упростить навигацию между тестами и предметом тестирования?
- Должен ли я использовать TDD?
- Что еще можно использовать для улучшения кода?