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

Mock и Stub - это два типа объектов, используемых в тестировании программного обеспечения для изоляции и эмуляции компонентов системы.

  1. Mock:

    • Определение: Mock объект создается для имитации поведения реального объекта или системного компонента.

    • Использование: Mocks используются для проверки вызовов методов, передачи параметров, и возвращения заданных результатов.

    • Пример: Если у вас есть класс, который взаимодействует с базой данных, вы можете создать Mock объект, чтобы эмулировать эту базу данных и проверить, вызываются ли методы взаимодействия с базой данных.

  2. Stub:

    • Определение: Stub представляет собой объект, предназначенный для предоставления заранее определенных ответов на вызовы методов.

    • Использование: Stubs используются для замены реальных объектов, чтобы предоставить контролируемые ответы и изолировать тестируемый код от зависимостей.

    • Пример: Если у вас есть функция, которая отправляет запрос на удаленный сервер, вы можете заменить этот запрос Stub объектом, чтобы избежать реальных сетевых вызовов во время тестирования.

Инструменты для работы с Mock и Stub:

  1. JUnit и Mockito (Java):

    • Mockito - библиотека для создания Mock и Stub объектов в тестах на Java.

// Пример создания Mock объекта с использованием Mockito
import static org.mockito.Mockito.*;

List<String> mockedList = mock(List.class);
when(mockedList.get(0)).thenReturn("first");
  1. unittest.mock (Python):

    • В Python можно использовать модуль unittest.mock для создания Mock и Stub объектов.

# Пример создания Mock объекта с использованием unittest.mock
from unittest.mock import MagicMock

mock_object = MagicMock()
mock_object.method.return_value = "mocked result"
  1. Sinon.js (JavaScript):

    • Sinon.js - библиотека для создания Mock и Stub объектов в тестах на JavaScript.

// Пример создания Stub объекта с использованием Sinon.js
const sinon = require('sinon');

const stub = sinon.stub();
stub.returns('stubbed result');

Last updated