[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-spring-test-chto-takoe-assertj-i-chem-on-luchshe-standartnykh-assertions":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},707,"chto-takoe-assertj-i-chem-on-luchshe-standartnykh-assertions",16,"spring-test","Spring Test","🧪","Что такое AssertJ и чем он лучше стандартных assertions?","AssertJ — библиотека fluent assertions для Java, предоставляющая читаемый и удобный API для написания проверок. Spring Boot включает AssertJ в стартер `spring-boot-starter-test` по умолчанию.\n\n### Преимущества\n\n- Fluent API — цепочки вызовов читаются как естественный язык\n- IDE-автодополнение — методы подсказываются в зависимости от типа объекта\n- Информативные сообщения об ошибках — при провале теста сразу видно, что пошло не так\n\n### Сравнение с JUnit assertions\n\n```java\n\u002F\u002F JUnit 5\nassertEquals(\"Иван\", user.getName());\nassertTrue(list.contains(\"элемент\"));\nassertNotNull(user.getEmail());\n\n\u002F\u002F AssertJ — читается естественнее\nassertThat(user.getName()).isEqualTo(\"Иван\");\nassertThat(list).contains(\"элемент\");\nassertThat(user.getEmail()).isNotNull();\n```\n\n### Работа со строками\n\n```java\nassertThat(\"Привет, мир!\")\n    .startsWith(\"Привет\")\n    .endsWith(\"мир!\")\n    .contains(\"вет, м\")\n    .hasSize(13)\n    .doesNotContain(\"ошибка\");\n```\n\n### Работа с коллекциями\n\n```java\nList\u003CUser> users = userService.findAll();\n\nassertThat(users)\n    .hasSize(3)\n    .isNotEmpty()\n    .extracting(User::getName)\n    .containsExactly(\"Иван\", \"Мария\", \"Пётр\")\n    .doesNotContain(\"Неизвестный\");\n\nassertThat(users)\n    .filteredOn(user -> user.getAge() > 25)\n    .hasSize(2)\n    .extracting(User::getName, User::getEmail)\n    .containsExactly(\n        tuple(\"Иван\", \"ivan@example.com\"),\n        tuple(\"Пётр\", \"petr@example.com\")\n    );\n```\n\n### Работа с исключениями\n\n```java\nassertThatThrownBy(() -> userService.findById(999L))\n    .isInstanceOf(UserNotFoundException.class)\n    .hasMessageContaining(\"999\")\n    .hasNoCause();\n\nassertThatCode(() -> userService.findById(1L))\n    .doesNotThrowAnyException();\n```\n\n### Работа с Optional\n\n```java\nassertThat(userRepository.findByEmail(\"ivan@example.com\"))\n    .isPresent()\n    .hasValueSatisfying(user -> {\n        assertThat(user.getName()).isEqualTo(\"Иван\");\n        assertThat(user.getAge()).isGreaterThan(18);\n    });\n```\n\n### Soft assertions (аналог assertAll в JUnit 5)\n\n```java\n@Test\nvoid shouldValidateUser() {\n    User user = userService.findById(1L);\n\n    SoftAssertions.assertSoftly(softly -> {\n        softly.assertThat(user.getName()).isEqualTo(\"Иван\");\n        softly.assertThat(user.getEmail()).contains(\"@\");\n        softly.assertThat(user.getAge()).isGreaterThan(0);\n        softly.assertThat(user.getRoles()).isNotEmpty();\n    });\n    \u002F\u002F Все ошибки будут собраны и показаны разом\n}\n```\n\n> **На собеседовании:** достаточно показать знание fluent API и пары фич: `extracting` для коллекций, `assertThatThrownBy` для исключений. Частая ошибка — путать порядок аргументов в JUnit (`assertEquals(expected, actual)`) и в AssertJ (`assertThat(actual).isEqualTo(expected)`).","","junior",[7],[],null,{"title":18,"description":19,"ogTitle":18,"ogDescription":20,"keywords":21,"schemaAnswer":22,"featuredSnippetReady":23},"Что такое AssertJ и чем он лучше стандартных assertions? — Gymterview","AssertJ — библиотека fluent assertions для Java, предоставляющая читаемый и удобный API для написания проверок. Spring Boot включает AssertJ в стартер `spring-b","AssertJ — библиотека fluent assertions для Java, предоставляющая читаемый и удобный API для написания проверок. Spring B",[7,13],"AssertJ — библиотека fluent assertions для Java, предоставляющая читаемый и удобный API для написания проверок. Spring Boot включает AssertJ в стартер `spring-boot-starter-test` по умолчанию.",true]