[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-testirovanie-kakie-sushchestvuyut-vidy-testovykh-obektov":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":16,"progress":17,"seo":18},1287,"kakie-sushchestvuyut-vidy-testovykh-obektov",42,"testirovanie","Тестирование","✅","Какие существуют виды тестовых объектов?","Тестовые объекты (test doubles) -- подменные объекты, которые заменяют реальные зависимости в тестах. Классификация по Gerard Meszaros: Dummy, Fake, Stub, Spy, Mock.\n\n| Тип | Назначение | Реальная логика | Проверка вызовов |\n|-----|-----------|-----------------|-----------------|\n| Dummy | Заглушка для компиляции | Нет | Нет |\n| Fake | Упрощённая рабочая реализация | Да (упрощённая) | Нет |\n| Stub | Возвращает заданные ответы | Нет | Нет |\n| Spy | Оборачивает реальный объект | Да | Да |\n| Mock | Программируемое поведение + проверка | Нет | Да |\n\n### Dummy\n\nОбъект-заглушка, передаётся как параметр, но не используется:\n\n```java\n\u002F\u002F null или пустой объект -- нужен только для компиляции\nvar service = new OrderService(new DummyLogger());\n```\n\n### Fake\n\nУпрощённая, но рабочая реализация (например, in-memory хранилище вместо реальной БД):\n\n\u003Cdetails>\n\u003Csummary>Пример Fake-репозитория\u003C\u002Fsummary>\n\n```java\nclass FakeUserRepository implements UserRepository {\n    private final Map\u003CLong, User> store = new HashMap\u003C>();\n\n    @Override\n    public User save(User user) {\n        store.put(user.getId(), user);\n        return user;\n    }\n\n    @Override\n    public Optional\u003CUser> findById(Long id) {\n        return Optional.ofNullable(store.get(id));\n    }\n}\n```\n\n\u003C\u002Fdetails>\n\n### Stub\n\nВозвращает заранее заданные ответы:\n\n```java\nwhen(userRepository.findById(1L)).thenReturn(Optional.of(testUser));\n```\n\n### Spy\n\nОборачивает реальный объект, записывая вызовы:\n\n```java\nList\u003CString> spyList = spy(new ArrayList\u003C>());\nspyList.add(\"item\");\nverify(spyList).add(\"item\"); \u002F\u002F проверяем, что add был вызван\nassertEquals(1, spyList.size()); \u002F\u002F реальная логика работает\n```\n\n### Mock\n\nОбъект с запрограммированным поведением и проверкой вызовов:\n\n```java\nUserRepository mock = mock(UserRepository.class);\nwhen(mock.findById(1L)).thenReturn(Optional.of(testUser));\n\u002F\u002F ... использование\nverify(mock, times(1)).findById(1L); \u002F\u002F проверка вызова\n```\n\n### Ключевые принципы\n\n- Stub -- подменяет данные (state verification); Mock -- проверяет взаимодействие (behavior verification)\n- В Mockito: `mock()` создаёт mock, `spy()` оборачивает реальный объект\n- Предпочитайте state verification (stub + assert result) над behavior verification (mock + verify)\n\n### Частые ошибки\n\n- Mock всего -- если можно протестировать с реальным объектом, mock не нужен\n- Verify без необходимости -- `verify` нужен только когда возвращаемое значение не говорит о корректности\n- Spy с final-классами -- Mockito не может spy final-классы без mockito-inline\n\n### Как используется в 2026\n\n- Mockito 5.x -- поддержка final-классов по умолчанию (mockmaker-inline)\n- Тренд: меньше моков, больше интеграционных тестов с Testcontainers\n\n> **На собеседовании:** интервьюер проверяет, знаете ли вы разницу между всеми пятью видами, а не только между stub и mock. Частая ошибка -- путать Fake и Stub или не знать, что такое Dummy.","","middle",[15],"testing",[],null,{"title":19,"description":20,"ogTitle":19,"ogDescription":21,"keywords":22,"schemaAnswer":23,"featuredSnippetReady":24},"Какие существуют виды тестовых объектов? — Gymterview","Тестовые объекты (test doubles) -- подменные объекты, которые заменяют реальные зависимости в тестах. Классификация по Gerard Meszaros: Dummy, Fake, Stub, Spy, ","Тестовые объекты (test doubles) -- подменные объекты, которые заменяют реальные зависимости в тестах. Классификация по G",[15,13],"Тестовые объекты (test doubles) -- подменные объекты, которые заменяют реальные зависимости в тестах. Классификация по Gerard Meszaros: Dummy, Fake, Stub, Spy, Mock.",true]