Разница между 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);
}
}
Например, можно использовать фейк для имитации базы данных, чтобы проверить логику взаимодействия с ней без необходимости запускать полноценное хранилище данных.
Что чаще используете при тестировании?
Библиотека джависта
#буст