Разница между Mock, Stub и Fake в тестировании В тестировании | Библиотека джависта | Java, Spring, Maven, Hibernate

Разница между Mock, Stub и Fake в тестировании

В тестировании часто встречаются термины Mock, Stub и Fake. Все они относятся к подмене реальных зависимостей, но выполняют разные роли. Давайте разберемся, в чем их отличие и когда применять каждый из них.

Mock

Мок — это объект, поведение которого мы заранее определяем. Мы говорим, какие методы должны быть вызваны, какие значения возвращать, и проверяем, были ли вызваны эти методы в тесте.

Пример:
@Test
public void testService() {
MyService service = mock(MyService.class);
when(service.getData()).thenReturn("Hello, World");

assertEquals("Hello, World", service.getData());
}

Идеальный выбор для тестирования взаимодействий между компонентами, когда нужно удостовериться, что объект выполняет определенные действия в процессе работы программы.

Stub

Стаб — это объект, который возвращает заранее заданные значения. Он просто заменяет реальную зависимость, не проверяя, как она используется, а только подставляет нужные значения.

Пример:
@Test
public void testService() {
MyService service = new StubService();
assertEquals("Mocked Data", service.getData());
}

Полезен, когда необходимо изолировать тестируемый компонент от других, например, при тестировании бизнес-логики, где важно не загружать реальные сервисы.

Fake

Фейк — это объект, который имеет реальное поведение, но в упрощенной или в ограниченной форме. Он может быть использован вместо реального объекта, но не имеет всех возможностей или работает быстрее.

Пример:

public class FakeDatabase implements Database {
private Map data = new HashMap<>();

public void insert(String key, String value) {
data.put(key, value);
}

public String get(String key) {
return data.get(key);
}
}

Например, можно использовать фейк для имитации базы данных, чтобы проверить логику взаимодействия с ней без необходимости запускать полноценное хранилище данных.

Что чаще используете при тестировании?

Библиотека джависта

#буст
Библиотека джависта | Java, Spring, Maven, Hibernate

Библиотека джависта | Java, Spring, Maven, Hibernate

@javaproglib
23.11K Подписчиков
Технологии Категория
Все самое полезное для Java-разработчика в одном канале. Список наших каналов: https://t.me/proglibrary/9197. Для обратной св...