[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-spring-test-chto-takoe-nested-testy-v-junit-5":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":15,"progress":16,"seo":17},709,"chto-takoe-nested-testy-v-junit-5",16,"spring-test","Spring Test","🧪","Что такое Nested тесты в JUnit 5?","`@Nested` — аннотация JUnit 5, позволяющая создавать вложенные тестовые классы для логической группировки тестов. Это улучшает структуру и читаемость, особенно когда один класс содержит много тестов для разных сценариев.\n\n\u003Cdetails>\u003Csummary>Полный пример с Nested тестами\u003C\u002Fsummary>\n\n```java\n@DisplayName(\"Тесты UserService\")\n@ExtendWith(MockitoExtension.class)\nclass UserServiceTest {\n\n    @Mock\n    private UserRepository userRepository;\n\n    @InjectMocks\n    private UserServiceImpl userService;\n\n    @Nested\n    @DisplayName(\"Метод findById\")\n    class FindById {\n\n        @Test\n        @DisplayName(\"должен вернуть пользователя по существующему id\")\n        void shouldReturnUserWhenExists() {\n            User user = new User(1L, \"Иван\");\n            when(userRepository.findById(1L)).thenReturn(Optional.of(user));\n\n            User result = userService.findById(1L);\n\n            assertEquals(\"Иван\", result.getName());\n        }\n\n        @Test\n        @DisplayName(\"должен бросить исключение при несуществующем id\")\n        void shouldThrowWhenNotFound() {\n            when(userRepository.findById(999L)).thenReturn(Optional.empty());\n\n            assertThrows(UserNotFoundException.class,\n                () -> userService.findById(999L));\n        }\n    }\n\n    @Nested\n    @DisplayName(\"Метод create\")\n    class Create {\n\n        @Test\n        @DisplayName(\"должен создать пользователя с валидными данными\")\n        void shouldCreateValidUser() {\n            UserDto dto = new UserDto(\"Иван\", \"ivan@example.com\");\n            when(userRepository.save(any())).thenAnswer(inv -> {\n                User u = inv.getArgument(0);\n                u.setId(1L);\n                return u;\n            });\n\n            User result = userService.create(dto);\n\n            assertNotNull(result.getId());\n            verify(userRepository).save(any());\n        }\n\n        @Test\n        @DisplayName(\"должен бросить исключение при дублировании email\")\n        void shouldThrowOnDuplicateEmail() {\n            UserDto dto = new UserDto(\"Иван\", \"existing@example.com\");\n            when(userRepository.existsByEmail(\"existing@example.com\"))\n                .thenReturn(true);\n\n            assertThrows(DuplicateEmailException.class,\n                () -> userService.create(dto));\n\n            verify(userRepository, never()).save(any());\n        }\n    }\n}\n```\n\n\u003C\u002Fdetails>\n\n### Результат в отчёте\n\n```\nТесты UserService\n├── Метод findById\n│   ├── должен вернуть пользователя по существующему id\n│   └── должен бросить исключение при несуществующем id\n├── Метод create\n│   ├── должен создать пользователя с валидными данными\n│   └── должен бросить исключение при дублировании email\n└── Метод delete\n    ├── должен удалить существующего пользователя\n    └── должен бросить исключение при удалении несуществующего\n```\n\nВложенные классы имеют доступ к полям и мокам внешнего класса. При этом `@BeforeEach` внешнего класса выполняется перед `@BeforeEach` вложенного.\n\n> **На собеседовании:** покажите, что `@Nested` используется для организации тестов по тестируемым методам или сценариям. Частая ошибка — забыть, что вложенные классы не могут иметь `@BeforeAll`\u002F`@AfterAll` без `@TestInstance(Lifecycle.PER_CLASS)`.","","junior",[7],[],null,{"title":18,"description":19,"ogTitle":18,"ogDescription":20,"keywords":21,"schemaAnswer":22,"featuredSnippetReady":23},"Что такое Nested тесты в JUnit 5? — Gymterview","`@Nested` — аннотация JUnit 5, позволяющая создавать вложенные тестовые классы для логической группировки тестов. Это улучшает структуру и читаемость, особенно ","`@Nested` — аннотация JUnit 5, позволяющая создавать вложенные тестовые классы для логической группировки тестов. Это ул",[7,13],"`@Nested` — аннотация JUnit 5, позволяющая создавать вложенные тестовые классы для логической группировки тестов. Это улучшает структуру и читаемость, особенно когда один класс содержит много тестов для разных сценариев.",true]