[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-testirovanie-chto-takoe-mockito-i-kak-ego-ispolzovat":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},1290,"chto-takoe-mockito-i-kak-ego-ispolzovat",42,"testirovanie","Тестирование","✅","Что такое Mockito и как его использовать?","Mockito -- фреймворк для создания mock-объектов в unit-тестах. Позволяет подменить зависимости тестируемого класса и проверить взаимодействие с ними.\n\n### Базовая настройка\n\nДля работы с JUnit 5 требуется `@ExtendWith(MockitoExtension.class)`. Аннотация `@Mock` создаёт mock-объект, `@InjectMocks` создаёт тестируемый объект и внедряет в него моки через конструктор или сеттеры.\n\n### Пример\n\n\u003Cdetails>\n\u003Csummary>Полный пример с Mockito\u003C\u002Fsummary>\n\n```java\n@ExtendWith(MockitoExtension.class)\nclass OrderServiceTest {\n\n    @Mock\n    private OrderRepository orderRepository;\n\n    @Mock\n    private PaymentService paymentService;\n\n    @InjectMocks\n    private OrderService orderService;\n\n    @Test\n    void shouldCreateOrder() {\n        \u002F\u002F given\n        Order order = new Order(\"product-1\", BigDecimal.TEN);\n        when(orderRepository.save(any(Order.class))).thenReturn(order);\n        when(paymentService.charge(any())).thenReturn(true);\n\n        \u002F\u002F when\n        Order result = orderService.createOrder(\"product-1\", BigDecimal.TEN);\n\n        \u002F\u002F then\n        assertThat(result.getProductId()).isEqualTo(\"product-1\");\n        verify(orderRepository).save(any(Order.class));\n        verify(paymentService).charge(any());\n    }\n\n    @Test\n    void shouldThrowWhenPaymentFails() {\n        when(paymentService.charge(any())).thenReturn(false);\n\n        assertThrows(PaymentException.class,\n            () -> orderService.createOrder(\"product-1\", BigDecimal.TEN));\n\n        verify(orderRepository, never()).save(any()); \u002F\u002F save НЕ вызван\n    }\n}\n```\n\n\u003C\u002Fdetails>\n\n### ArgumentCaptor -- захват аргументов\n\n```java\n@Test\nvoid shouldSendCorrectEmail() {\n    orderService.createOrder(\"product-1\", BigDecimal.TEN);\n\n    ArgumentCaptor\u003CEmail> captor = ArgumentCaptor.forClass(Email.class);\n    verify(emailService).send(captor.capture());\n\n    Email sentEmail = captor.getValue();\n    assertThat(sentEmail.getSubject()).contains(\"Заказ создан\");\n    assertThat(sentEmail.getTo()).isEqualTo(\"customer@mail.com\");\n}\n```\n\n### Основные методы\n\n| Метод | Назначение |\n|-------|-----------|\n| `when(...).thenReturn(...)` | Задать возвращаемое значение |\n| `when(...).thenThrow(...)` | Бросить исключение |\n| `doReturn(...).when(spy)` | Для spy-объектов (без вызова реального метода) |\n| `verify(mock).method()` | Проверить, что метод вызван |\n| `verify(mock, times(2))` | Проверить количество вызовов |\n| `verify(mock, never())` | Проверить, что метод НЕ вызван |\n| `any()`, `eq()`, `argThat()` | Матчеры аргументов |\n\n### Ключевые принципы\n\n- `@ExtendWith(MockitoExtension.class)` -- обязательно для JUnit 5\n- `@InjectMocks` -- создаёт объект и внедряет `@Mock`-поля через конструктор\u002Fсеттеры\n- BDD-стиль: `given(...).willReturn(...)` + `then(mock).should().method()`\n- Mockito 5.x -- final-классы мокируются по умолчанию\n\n### Частые ошибки\n\n- Mock вместо реального объекта -- если класс простой и без зависимостей, mock не нужен\n- `when()` на spy -- используйте `doReturn().when(spy)`, иначе реальный метод выполнится\n- Смешивание matchers: `verify(mock).method(eq(\"a\"), any())` -- если один аргумент matcher, все должны быть matchers\n\n### Как используется в 2026\n\n- Mockito 5.x -- стандарт; mockmaker-inline по умолчанию (final, static mocking)\n- `@MockitoBean` (Spring Boot 3.4+) -- замена `@MockBean` с лучшей производительностью\n\n> **На собеседовании:** интервьюер часто просит написать тест с Mockito на доске. Важно показать структуру given-when-then, использование `@Mock`\u002F`@InjectMocks` и знание разницы между `when().thenReturn()` и `doReturn().when()`. Частая ошибка -- не знать про matchers и `ArgumentCaptor`.","","middle",[15],"testing",[],null,{"title":19,"description":20,"ogTitle":19,"ogDescription":21,"keywords":22,"schemaAnswer":20,"featuredSnippetReady":23},"Что такое Mockito и как его использовать? — Gymterview","Mockito -- фреймворк для создания mock-объектов в unit-тестах. Позволяет подменить зависимости тестируемого класса и проверить взаимодействие с ними.","Mockito -- фреймворк для создания mock-объектов в unit-тестах. Позволяет подменить зависимости тестируемого класса и про",[15,13],true]