-
Для чего нужны тесты?
Ответ
Тесты позволяют сократить время на проверку написанного кода. -
Что такое TDD и BDD?
Ответ
-
TDD — Разработка через тестирование, Test Driven Development. Сначала пишем тест, затем реализуем его в коде.
-
BDD — Разработка через поведение, Behavior-driven development. Расширение подхода TDD к разработке и тестированию, при котором особое внимание уделяется поведению системы/модуля в терминах бизнеса(заказчика). Как правило, такие тесты иллюстрируют и тестируют различные сценарии, которые интересны непосредственно клиенту системы. В связи с этим при составлении таких тестов часто используется фреймворки, обладающие синтаксисом, обеспечивающим читаемость тестов не только программистом, но и представителями заказчика.
-
DDD - Предметно-ориентированное проектирование, Domain-driven design. Набор принципов и схем, направленных на создание оптимальных систем объектов. Процесс разработки сводится к созданию программных абстракций, которые называются моделями предметных областей.
-
-
Что такое спеки, фабрики, моки, стабы, musta_matchers?
Ответ
- Спеки — спецификация, утвержденный документ, являющийся основой для разработки компьютерной программы и для ее тестирования. Либо это исполняемый файл для проверки теста.
- Фабрики — Это набор данных, которые определены нами заранее и которые будут вызываться в тестах. К примеру мы можем создать фабрику
people
с набором имен, возраста, цвета кожи и все это рандомно, с проверкой и тестированием моделиpeople
. - Моки это поддельные методы с заранее запрограммированным поведением и соглашениями.
- Стабы похожи на шпионов, но они заменяют целевую функцию (заглушки). Вы можете использовать стабы для управления поведением метода, чтобы форсировать какие-то события в коде (например, выброс ошибки).
- Musta_matchers — Маста матчер позволяет проводить проверку до прогона теста. То есть
before_action
иbefore_filter
. Матчеры позволяют запускать к примеру создание нового юзера с помощью колбекаbefore
.
-
Что такое юнит тесты, интеграционные тесты, функциональные тесты?
Ответ
Модульное тестирование (юнит-тесты) — предназначены для тестирования отдельных модулей/классов. Суть их в том, что мы тестируем поведение только одного класса за раз. Если класс ссылается на инстансы других классов — мы их мокаем. То есть подсовываем им фэйковый класс, который имеет тот же интерфейс, но внутри не реализация методов, а проверка, вызывали ли метод, с каким аргументами, сколько раз вызывали и т.д.
Функциональное тестирование — это тестирования всего приложения в сборе. Если это REST API, то у нас через curl дергаются реальные методы, отправляются более менее реальные запросы и валидируются ответы. Если web-страничка, то это UI тесты с силениумом/phantom.js/zombi.js или, если нам не нужно еще и js тестить, просто curl + какой виртуальный браузер на том же php. Вообще по хорошему функциональные тесты не допускают никаких моков и т.д. но опять же если очень хочется то можно (опять же обращение к сторонним сервисам, контроля за которыми у нас нету).
Интеграционное тестирование — тестирование нескольких модулей в связке. То есть мы тестируем наш компонент или его самодостаточный кусок в реальных условиях. Если этот компонент для работы с файлами — разрешаем ему доступ к файлам. Если база данных — то даем реальное соединение с базой. А можем что-то и замокать.
Это как говорится, зависит от задачи. Скажем обращение к сторонним апишкам стоит мокать и стабить. Главная цель этих тестов, удостовериться что модули вместе работают хорошо. Особенно важно это когда модули пишут разные люди.
-
Какие гемы для тестирования вы знаете?
Ответ
- Rspec (https://relishapp.com/rspec/rspec-rails/docs)
- Cucumber (https://cucumber.io/, https://habr.com/post/332754/)
- FactoryBot (бывший FactoryGirl)
- DatabaseCleaner
- Capybara
- CapybaraWebkit
- Watir
-
Какие книги по тестированию читали?
Ответ
Книги по тестированию:https://www.amazon.com/s/ref=nb_sb_noss?url=search—alias%3Dstripbooks&field—keywords=rspec+rails