через reflect трогать приватные статические поля, чтобы отработали все случаи и покрытие было максимальным. Но когда их меняешь в одном из тестов, то падают все остальные тесты, где идёт работа с этими полями, потому что их значение не возвращается в исходное, а остается тем, которое было задано намеренно с ошибкой в одном из тестов. Можно ли как-то автоматизировать возврат к изначальному значению или это руками делать?
Давать тестам разные класслоадеры. @RunWith(SeparateClassloaderTestRunner.class) или что-то там.
Ещё можно запускать каждый тест в отдельной jvm, но лучше не трогать приватные поля, на то они и приватные.
Если честно, это звучит как крайне сомнительная логика для тестов, и она значит, что кто-то или поленился нормально засетапить состояние в тестах, или архитектура кода сомнительная, или тестите вы что-то странное, кмк
Лучше почитайте https://www.piter.com/product/printsipy-yunit-testirovaniya и не пишите такие странные и бесполезные тесты
если есть такая необходимость затестить приватные поля/методы, вынесите их в отдельный класс с внятным открытым интерфейсом и покройте этот класс юнит тестами, если нужна приватность - всегда можно сделать этот класс package-private и безопасно тестировать в тестах, пакет которых совпадает с пакетом класса. Иначе получается, что вы игнорите принцип чёрного ящика и лезете в его внутренности, так можно либо что-нибудь поломать, либо получить нерелевантный тест
а зачем так плохо сделано ?
я руками возвращаю
иногда на проекте есть правило: не использовать @MockBean чтобы контекст не перестартовывался. Поэтому приходится использовать ReflectionTestUtils
а, MockBean тебе в помощь, если не критично что иногда будет контекст перестартовываться. После завершения теста он возвращает состояние
Нужно правильно строить иерархию контекстов, тогда и MockBean не проблема, только один Бин будет добавлять
поясни, что значит иерархия контекстов? У нас, например, куча модулей, тесты запускаются в многопоточке. Сами тесты мы помечаем аннотациями. Т.е. на несколько тестов может быть одна аннотация. Если в этих тестах будет несколько с mockBean, то там наверное будет лишние разы перестартовываться контекст
сходу не могу гайд и пример нагуглить https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/test/context/ContextHierarchy.html
https://youtu.be/7mZqJShu_3c?t=1197
вот переслушал кусок, они там ничего про перестарт при использовании @MockBean не сказали
Обсуждают сегодня