Да, вчера проверил, там есть свои подводные камни.
Так как классы inner, то создание таких ресурсов, что можно переиспользовать между тестами (контейнеров в частности), вызывает затруднения. Если надо запустить один тест, то можно и пренебречь, а если несколько, то может быть дороговато.
У меня не было необходимости выражать отношение depends on для контейнеров, но мне кажется это можно довольно явно выразить через ´Nested´ (см. ссылку).
Внутренний тест будет запускать после внешних тестов и после их инициализации. Можно и без Spring обойтись, в теории.
У самого фреймворка jUnit 5 прекрасная документация по этой теме.
Там же подробнее про ResourceLock, который вы упомянули мельком. Также стоит упомянуть важное замечание из документации:
Parallel test execution is currently an experimental feature.
Я думаю, что стоит предупредить читателя об этом в начале статьи. Уже только по причине выше, но и не только! Иногда авторы расширений не рассчитывают на работу в многопоточной среде.
Я бы еще сказал, что в статье мало ссылок. Информацию не из головы вы же берете?
Их нет — ссылок, я не нашел ни одной. Я не считаю единственную с приглашением на бесплатный урок. Вопрос только в том, а кому надо такой урок?
Чем проще уволить сотрудника компании, тем быстрее мир приходит к киберпанку - по сути судьба каждого рабочего отдается на откуп твоему работодателю и каждый раз, предпочитая голосовать ногами, ты сам делаешь еще один маленький шаг к киберпанку.
Каждый шаг, по цепной реакции, вызывает ещё один. Место пустым всегда не будет. Даже самый малый шаг может создать немаленькую волну, или является частью уже существующей.
Мнение о саморазвитии, которое двигает Роберт Мартин. Идеальный программист Глава 1.
За свою карьеру отвечаете вы сами. Ваш работодатель не обязан заботиться о вашей востребованности на рынке труда. Он не обязан обучать вас, отправлять вас на конференции или покупать книги. Всем этим должны заниматься вы сами. Горе этому разработчику который доверить свою карьеру своему работодателю!
Из этой посылки он сразу говорит, что мы должны быть благодарны за оплату курсов, книг. Не воспринимать как должное.
Некоторые работодатели согласны покупать вам книги, отправлять вас на семинары и конференции. Прекрасно, они оказывают вам услугу. Вы никогда не думаете, что они обязаны это делать! Если ваш работодатель не делает этого за вас, подумайте, как сделать это своими силами.
Далее следует:
Запланируйте 60 рабочих часов в неделю. Первый 40 вы работаете на своего работодателя, остальные 20 на себя. В эти 20:00 вы читаете книги, практикуйтесь, учитесь иным образом развивайте свою карьеру.
После чего:
Может показаться, что мой путь ведёт к «перегорание» на работе. Напротив, он помогает избежать этой печальной участи. […]
Пока у лидеров мнений такая позиция, все будут думать так. Это книга, которую советуют на входе в профессию. Мне такая позиция кажется конформистской с проблемами индустрии. Работодатель заинтересован в развитии сотрудника. Хочет он этого понимать или нет. Требовать от сотрудника развиваться в не рабочее время, увольнять как непроизвольного иначе — это то, к чему ведёт логика из книги. Таким образом рабочий день на всем рынке неявно двинется в сторону удлинения, неявного и недоплачиваемого. От чего выиграет не работник.
По ссылкам, что вы отправили рассматривается только один случай применения — группы.
Есть другой пример использования, про который я писал в комментарии выше. По ссылкам там есть примеры этого использования. Я продублирую их тут.
Пример 1.
@Getter
// Без неё не будет происходить проверка, потому что не будет применен аспект.
@Validated
@ConstructorBinding
@AllArgsConstructor
@ConfigurationProperties("defaults")
public class DefaultsProperties {
@NotNull
private Author author;
@Getter
@AllArgsConstructor
public static class Author {
@NotBlank
private String name;
@NotBlank @Email @EmailDomains
private String email;
}
}
Can also be used with method level validation, indicating that a specific class is supposed to be validated at the method level (acting as a pointcut for the corresponding validation interceptor), but also optionally specifying the validation groups for method-level validation in the annotated class. Applying this annotation at the method level allows for overriding the validation groups for a specific method but does not serve as a pointcut; a class-level annotation is nevertheless necessary to trigger method validation for a specific bean to begin with. Can also be used as a meta-annotation on a custom stereotype annotation or a custom group-specific validated annotation.
Выделение мое.
То есть аннотация Validated служит индикатором по которому к классу применяется обработчик валидация.
Пример 2.
@Service
// Также необходимо
@Validated
@RequiredArgsConstructor
public class CrudNewsService implements NewsService {
// ...
@Override
public News save(@Valid CreateNewsDto createNewsDto) {
News news = conversionService.convert(createNewsDto, News.class)
.applyDefaults(authorDefaults, defaultsAuthorFactory);
NewsModel newsModel = conversionService.convert(news, NewsModel.class);
NewsModel savedModel = newsRepository.save(newsModel);
return convertNewsModel(savedModel);
}
// ...
}
Аннотация @Valid включает валидация на параметре. NOTE! Над классом не требуется указывать @Validated, чтобы это работало для @Controller классов. Чтобы валидация работала для других элементов контекста, добавьте над ним аннотацию @Validated. Но чтобы работали аннотации @NotNull, @NotBlank и другие, надо ОБЯЗАТЕЛЬНО ставить аннотацию @Validated. Также важно, что Spring MVC по-умолчанию обработает проверки, которые не требуют @Validated на @Controller
Подробнее можно почитать по ссылкам, что я отправил.
Добавление аннотации @Validated в контроллер перед DTO, которую необходимо проверить при вызове данного end-point.
Чтобы вызвать проверки по аннотации Valid на RequestBody (или другой составной параметр метода), то не надо указывать Validated над контроллером, достаточно аннотации Valid над параметром. Это можно точно увидеть вот тут в документации. То есть Valid отработается самим Spring для контроллера. Для отработки других (NotNull, NotBlank) аннотаций надо уже указать Validated (или если это не контроллер). Также про это можно почитать у меня в канале телеграм раз, два. Или у меня в GitHub.
Было бы интересно посмотреть на такой сценарий событий. У MS уже есть VS Code & LSP.
А JetBrains, не спешат делать свои инструменты более открытыми.
Да, вчера проверил, там есть свои подводные камни.
Так как классы
inner
, то создание таких ресурсов, что можно переиспользовать между тестами (контейнеров в частности), вызывает затруднения. Если надо запустить один тест, то можно и пренебречь, а если несколько, то может быть дороговато.У меня не было необходимости выражать отношение depends on для контейнеров, но мне кажется это можно довольно явно выразить через ´Nested´ (см. ссылку).
Внутренний тест будет запускать после внешних тестов и после их инициализации. Можно и без Spring обойтись, в теории.
Пробовали использовать этот механизм?
У самого фреймворка jUnit 5 прекрасная документация по этой теме.
Там же подробнее про
ResourceLock
, который вы упомянули мельком. Также стоит упомянуть важное замечание из документации:Я думаю, что стоит предупредить читателя об этом в начале статьи. Уже только по причине выше, но и не только! Иногда авторы расширений не рассчитывают на работу в многопоточной среде.
Я бы еще сказал, что в статье мало ссылок. Информацию не из головы вы же берете?
Их нет — ссылок, я не нашел ни одной. Я не считаю единственную с приглашением на бесплатный урок. Вопрос только в том, а кому надо такой урок?
Хорошо сказано:
Каждый шаг, по цепной реакции, вызывает ещё один. Место пустым всегда не будет. Даже самый малый шаг может создать немаленькую волну, или является частью уже существующей.
Мнение о саморазвитии, которое двигает Роберт Мартин. Идеальный программист Глава 1.
Из этой посылки он сразу говорит, что мы должны быть благодарны за оплату курсов, книг. Не воспринимать как должное.
Далее следует:
После чего:
Пока у лидеров мнений такая позиция, все будут думать так. Это книга, которую советуют на входе в профессию. Мне такая позиция кажется конформистской с проблемами индустрии. Работодатель заинтересован в развитии сотрудника. Хочет он этого понимать или нет. Требовать от сотрудника развиваться в не рабочее время, увольнять как непроизвольного иначе — это то, к чему ведёт логика из книги. Таким образом рабочий день на всем рынке неявно двинется в сторону удлинения, неявного и недоплачиваемого. От чего выиграет не работник.
По ссылкам, что вы отправили рассматривается только один случай применения — группы.
Есть другой пример использования, про который я писал в комментарии выше. По ссылкам там есть примеры этого использования. Я продублирую их тут.
Пример 1.
В документации.
То есть аннотация Validated служит индикатором по которому к классу применяется обработчик валидация.
Пример 2.
Также см. что я прикреплял выше:
Подробнее можно почитать по ссылкам, что я отправил.
Непонятно что тут хотели сказать:
Чтобы вызвать проверки по аннотации Valid на RequestBody (или другой составной параметр метода), то не надо указывать Validated над контроллером, достаточно аннотации Valid над параметром. Это можно точно увидеть вот тут в документации. То есть Valid отработается самим Spring для контроллера. Для отработки других (NotNull, NotBlank) аннотаций надо уже указать Validated (или если это не контроллер). Также про это можно почитать у меня в канале телеграм раз, два. Или у меня в GitHub.
Также там есть в тексте "например", но его нет.