[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-testirovanie-kakie-osnovnye-annotatsii-junit-5-vy-znaete":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},1289,"kakie-osnovnye-annotatsii-junit-5-vy-znaete",42,"testirovanie","Тестирование","✅","Какие основные аннотации JUnit 5 вы знаете?","JUnit 5 предоставляет аннотации для управления жизненным циклом тестов, параметризации, группировки и фильтрации. Ядро: `@Test`, `@BeforeEach`, `@AfterEach`, `@BeforeAll`, `@AfterAll`, `@DisplayName`, `@Disabled`, `@Nested`, `@ParameterizedTest`.\n\n### Жизненный цикл теста\n\n```java\nclass LifecycleTest {\n\n    @BeforeAll  \u002F\u002F один раз перед всеми тестами (static)\n    static void initAll() { }\n\n    @BeforeEach \u002F\u002F перед каждым тестом\n    void init() { }\n\n    @Test\n    void testMethod() { }\n\n    @AfterEach  \u002F\u002F после каждого теста\n    void tearDown() { }\n\n    @AfterAll   \u002F\u002F один раз после всех тестов (static)\n    static void tearDownAll() { }\n}\n```\n\n### Основные аннотации\n\n| Аннотация | Назначение |\n|-----------|-----------|\n| `@Test` | Маркирует тестовый метод |\n| `@DisplayName` | Человекочитаемое имя теста |\n| `@Disabled` | Пропустить тест (аналог `@Ignore` в JUnit 4) |\n| `@Tag` | Тегирование для фильтрации (unit, integration) |\n| `@Timeout` | Таймаут в секундах |\n| `@Nested` | Вложенные тесты для группировки сценариев |\n| `@RepeatedTest` | Повторение теста N раз |\n| `@ParameterizedTest` | Параметризованный тест с несколькими наборами данных |\n\n### Вложенные тесты\n\n```java\n@Nested\n@DisplayName(\"Когда пользователь авторизован\")\nclass WhenAuthenticated {\n    @Test void shouldAccessProfile() { }\n    @Test void shouldAccessSettings() { }\n}\n```\n\n### Параметризованные тесты\n\n\u003Cdetails>\n\u003Csummary>Примеры параметризованных тестов\u003C\u002Fsummary>\n\n```java\n@ParameterizedTest\n@ValueSource(strings = {\"racecar\", \"radar\", \"level\"})\nvoid shouldDetectPalindrome(String word) {\n    assertTrue(StringUtils.isPalindrome(word));\n}\n\n@ParameterizedTest\n@CsvSource({\"1, 1, 2\", \"2, 3, 5\", \"10, 20, 30\"})\nvoid shouldAdd(int a, int b, int expected) {\n    assertEquals(expected, calculator.add(a, b));\n}\n\n@ParameterizedTest\n@MethodSource(\"orderProvider\")\nvoid shouldCalculateTotal(Order order, BigDecimal expected) {\n    assertEquals(expected, order.getTotal());\n}\n\nstatic Stream\u003CArguments> orderProvider() {\n    return Stream.of(\n        Arguments.of(new Order(2, 10.0), BigDecimal.valueOf(20.0)),\n        Arguments.of(new Order(0, 10.0), BigDecimal.ZERO)\n    );\n}\n```\n\n\u003C\u002Fdetails>\n\n### Assertions (проверки)\n\n```java\nassertEquals(expected, actual);\nassertNotNull(object);\nassertTrue(condition);\nassertThrows(Exception.class, () -> riskyMethod());\nassertDoesNotThrow(() -> safeMethod());\nassertTimeout(Duration.ofSeconds(2), () -> longMethod());\n\n\u002F\u002F Группировка -- все assertions выполняются, даже если первый упал\nassertAll(\n    () -> assertEquals(\"John\", user.getName()),\n    () -> assertEquals(\"john@mail.com\", user.getEmail()),\n    () -> assertNotNull(user.getId())\n);\n```\n\n### Миграция с JUnit 4 на JUnit 5\n\n| JUnit 4 | JUnit 5 |\n|---------|---------|\n| `@Before` | `@BeforeEach` |\n| `@After` | `@AfterEach` |\n| `@BeforeClass` | `@BeforeAll` |\n| `@AfterClass` | `@AfterAll` |\n| `@Ignore` | `@Disabled` |\n| `@Test(expected=...)` | `assertThrows(...)` |\n| `@RunWith` | `@ExtendWith` |\n\n### Ключевые принципы\n\n- JUnit 5 = JUnit Platform + JUnit Jupiter (новый API) + JUnit Vintage (совместимость с JUnit 4)\n- `@BeforeAll`\u002F`@AfterAll` -- `static` по умолчанию; для нестатических: `@TestInstance(Lifecycle.PER_CLASS)`\n- `@ParameterizedTest` -- один тест с множеством входных данных; заменяет дублирование\n- `assertAll` -- проверяет все условия, показывая все ошибки сразу\n\n### Частые ошибки\n\n- JUnit 4 аннотации в JUnit 5 -- `@Before` вместо `@BeforeEach`, `@Ignore` вместо `@Disabled`\n- `@ParameterizedTest` без источника данных -- нужен `@ValueSource`, `@CsvSource` или `@MethodSource`\n- Забыть `@Test` -- метод без аннотации не запустится как тест\n\n### Как используется в 2026\n\n- JUnit 5 -- единственная актуальная версия; JUnit 4 -- legacy\n- `@Tag` + Maven\u002FGradle profiles -- раздельный запуск unit и integration тестов\n- IntelliJ IDEA полностью поддерживает `@DisplayName`, `@Nested`, `@ParameterizedTest`\n\n> **На собеседовании:** интервьюер часто просит перечислить аннотации жизненного цикла и объяснить разницу с JUnit 4. Частая ошибка -- не знать про `@ParameterizedTest` и `@Nested`, которые показывают уровень владения фреймворком.","","junior",[15],"testing",[],null,{"title":19,"description":20,"ogTitle":19,"ogDescription":21,"keywords":22,"schemaAnswer":23,"featuredSnippetReady":24},"Какие основные аннотации JUnit 5 вы знаете? — Gymterview","JUnit 5 предоставляет аннотации для управления жизненным циклом тестов, параметризации, группировки и фильтрации. Ядро: `@Test`, `@BeforeEach`, `@AfterEach`, `@","JUnit 5 предоставляет аннотации для управления жизненным циклом тестов, параметризации, группировки и фильтрации. Ядро: ",[15,13],"JUnit 5 предоставляет аннотации для управления жизненным циклом тестов, параметризации, группировки и фильтрации. Ядро: `@Test`, `@BeforeEach`, `@AfterEach`, `@BeforeAll`, `@AfterAll`, `@DisplayName`, `@Disabled`, `@Nested`, `@ParameterizedTest`.",true]