Что такое стаб
Стабы — объекты, также называемые заглушками, которые возвращают заранее определенные значения на определенные входные данные.
Другими словами, стаб/заглушка — это объект, который выглядит как настоящий объект, но содержит только методы, необходимые для тестирования. Когда мы не хотим (или не можем) использовать объекты, которые могут отвечать реальными данными, используем стабы.
Итак, самый простой и статичный вид тестового дубликата называется заглушкой.
Когда применяются стабы
- Когда нужно имплементировать интерфейс, который отделит нас от сторонней библиотеки, если мы разрабатываем бекенд небольшого приложения, которое будет взаимодействовать с API. Этот интерфейс будет выдавать нам hardcoded-значения, таким образом, служить заглушкой.
- Если мы тестируем отдельное небольшое приложение, то мы можем создать стаб для Rest API, на котором работает приложение. Это можно сделать с помощью любого внутреннего инструмента, созданного dev-командой.
Что такое мок
Более сложные объекты, хранящие вызовы методов, называются моками (реже макетами). К ним относятся динамические обертки для зависимостей, используемые в тестах. Они используются для документирования и проверки того например, как Java-классы взаимодействуют друг с другом.
Итак, более мощная и адаптируемая разновидность тестовых дубликатов называется моками. Моки и заглушки идентичны по общему предназначению, однако например к объекту-моку можно применять assert’ы, а к стабу — нет. Мок-объект определяет, прошел или не прошел тест. Обычно на один отдельный тест приходится не более одного объекта-мока.
Когда применяется мок
- Популярный фреймворк Mockito применяется для создания моков зависимых классов, если в разрабатываемом приложении много классов, которые необходимо протестировать.
- Фреймворки типа mountebank или WireMock можно использовать, если при построении бекенда приложения нам необходимо отойти от требований API в HTTP. Затем создается фейк (это еще одна разновидность тестовых дубликатов) для зависимых классов теста.
Стабы и моки — в чем разница
Стаб | Мок | |
---|---|---|
Источник данных | Источник данных в стабе — hardcoded. Часто он тесно связан с тестовым набором | Из тестов |
Предназначение | Верификация состояния | Верификация характеристик |
Создается вручную или инструментом | Большинство пишутся вручную, но иногда инструментами | Обычно используются библиотеки Mockito, JMock и WireMock |
Применение | Для простых тестовых наборов | Для больших сложных тестовых наборов |
Есть ли GUI | Нет GUI | Есть |
Преимущества | Много бесплатных инструментов и онлайн-ресурсов | Тоже есть много ресурсов и бесплатных открытых инструментов |
Недостатки | В связи с тем, что данные hardcoded, в тест-кейсах нужно это учитывать | Используется в основном разработчиками, а не тестировщиками |
Какие нужны скиллы | Средние | Прокачанные скиллы |
Кем имплементируется | Разработчиками, тестировщиками, самостоятельно или инструментами | С помощью библиотек JMock, WireMock и пр. |