> For the complete documentation index, see [llms.txt](https://kaze.gitbook.io/qa-theory/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kaze.gitbook.io/qa-theory/teoriya-ruchnogo-testirovaniya/chto-takoe-mock-stub-kakie-znaete-instrumenty-dlya-raboty-s-nimi.md).

# Что такое mock/stub? Какие знаете инструменты для работы с ними?

### **1. Что такое Mock и Stub**

#### **A. Stub**

* **Что делает:** возвращает **заранее определённые данные** при вызове метода/функции.
* **Цель:** изолировать тестируемый модуль от внешних зависимостей.
* **Пример:** API, которое всегда возвращает фиксированный JSON вместо реального ответа.

#### **B. Mock**

* **Что делает:** **имитирует поведение объекта** и позволяет **проверять вызовы, аргументы и количество обращений**.
* **Цель:** тестировать не только результат, но и **взаимодействие с зависимыми компонентами**.
* **Пример:** Проверка, что метод `sendEmail()` был вызван ровно один раз с корректными параметрами.

> Кратко: **stub — для данных**, **mock — для поведения и взаимодействия**.

***

### **2. Инструменты и библиотеки**

#### **Для Java**

* **Mockito** — создание mock и stub объектов
* **EasyMock** — упрощённое создание mocks
* **PowerMock** — для сложных случаев, статические методы и конструкторы

#### **Для Python**

* **unittest.mock** — стандартная библиотека для mocks/stubs
* **pytest-mock** — плагин для pytest, упрощает работу с mock

#### **Для JavaScript**

* **Jest** — встроенные функции `jest.fn()` для mock
* **Sinon.js** — mocks, stubs, spies

#### **Для C#**

* **Moq** — создание mock-объектов
* **NSubstitute** — альтернативный инструмент для mock/stub

***

### **3. Пример использования в тестировании**

* **Stub:** при тестировании модуля расчёта скидки stub API платежей возвращает всегда успешный ответ.
* **Mock:** проверка, что модуль уведомлений вызывается ровно один раз после успешного платежа.
