170 похожих чатов

Подскажите, как грамотно решить следующую проблему: при junit тестировании приходится

через reflect трогать приватные статические поля, чтобы отработали все случаи и покрытие было максимальным. Но когда их меняешь в одном из тестов, то падают все остальные тесты, где идёт работа с этими полями, потому что их значение не возвращается в исходное, а остается тем, которое было задано намеренно с ошибкой в одном из тестов. Можно ли как-то автоматизировать возврат к изначальному значению или это руками делать?

14 ответов

25 просмотров

Давать тестам разные класслоадеры. @RunWith(SeparateClassloaderTestRunner.class) или что-то там.

Ещё можно запускать каждый тест в отдельной jvm, но лучше не трогать приватные поля, на то они и приватные.

Если честно, это звучит как крайне сомнительная логика для тестов, и она значит, что кто-то или поленился нормально засетапить состояние в тестах, или архитектура кода сомнительная, или тестите вы что-то странное, кмк

Лучше почитайте https://www.piter.com/product/printsipy-yunit-testirovaniya и не пишите такие странные и бесполезные тесты

если есть такая необходимость затестить приватные поля/методы, вынесите их в отдельный класс с внятным открытым интерфейсом и покройте этот класс юнит тестами, если нужна приватность - всегда можно сделать этот класс package-private и безопасно тестировать в тестах, пакет которых совпадает с пакетом класса. Иначе получается, что вы игнорите принцип чёрного ящика и лезете в его внутренности, так можно либо что-нибудь поломать, либо получить нерелевантный тест

а зачем так плохо сделано ?

я руками возвращаю

Denis Chikanov
Если честно, это звучит как крайне сомнительная ло...

иногда на проекте есть правило: не использовать @MockBean чтобы контекст не перестартовывался. Поэтому приходится использовать ReflectionTestUtils

а, MockBean тебе в помощь, если не критично что иногда будет контекст перестартовываться. После завершения теста он возвращает состояние

Dmitry Golikov
иногда на проекте есть правило: не использовать @M...

Нужно правильно строить иерархию контекстов, тогда и MockBean не проблема, только один Бин будет добавлять

Владислав Хакин
Нужно правильно строить иерархию контекстов, тогда...

поясни, что значит иерархия контекстов? У нас, например, куча модулей, тесты запускаются в многопоточке. Сами тесты мы помечаем аннотациями. Т.е. на несколько тестов может быть одна аннотация. Если в этих тестах будет несколько с mockBean, то там наверное будет лишние разы перестартовываться контекст

Dmitry Golikov
поясни, что значит иерархия контекстов? У нас, нап...

сходу не могу гайд и пример нагуглить https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/test/context/ContextHierarchy.html

𝙰𝚗𝚍𝚛𝚎𝚢 𝖪𝖺𝗋𝖾𝗉𝗂𝗇
https://youtu.be/7mZqJShu_3c?t=1197

вот переслушал кусок, они там ничего про перестарт при использовании @MockBean не сказали

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта