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

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

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

14 ответов

22 просмотра

Давать тестам разные класслоадеры. @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 не сказали

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

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

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
И никого не интересует какие пакеты кто использует. ((% Заходишь на сайт симфони и видишь поддержку Украины - по законам РФ это ж экстремизм. Только никто не отказывается от с...
Am Ambrion
11
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Чтобы перехватить все нажимания буков на форме, надо хук ставить? Пробовал на форме ОнКейДаун, оно ловит клаву если фокус не на компоненте с вводом текста
Serjone
15
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
7
Народ! Впервые клиенту пришло письмо от РКН, у вас, дескать, есть яндекс метрика, а нигде не написано, что вы ее юзаете. Никто не сталкивался?
Sasha Beep
14
Всем привет! вывожу на общей стр дочерние ресурсыв каждом ресурсе галерея, и первая фотка должна выводиться на общей [!DocLister? &prepare=photo !]
Alekso
12
Я правильно понимаю что нет способов получить список ожидающих заявок на вступление в группу с помощью бота из mtproto?
Шамиль Прилов
7
А можно вопрос? Мне сегодня сказали что у меня функция (которая просто заполняет массив значениями) не правильная void Full(double * arr, int n) { for (int i = 0; i < n; i...
† C E †
7
Добрый вечер. Хочу чтобы у меня в классе поле было функцией, которая возвращает строку. Делаю так: interface ... TGetOutPath = function : String of object; ... protec...
Kirill Filippenok
12
Карта сайта