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

Всем привет! Можно холиварную тему вам в чатик?) хочется тестировать приватные

методы по отдельности.

Есть 2 способа:

1) делать private методы, все-таки protected
2) использовать различные библиотеки или рефлексию

при первом варианте минусов не вижу.
при втором: дополнительные библиотеки, больше кода, хардкода

нормальная ли практика менять модификаторы доступа с private на protected в коммерческих проектах ради тестов?

Пример - есть кастомный класс валидатор, который просто делает различные проверки методами void...
порядок выполнения методов не важен, если для такого класса написать юнит тест, то приходится мокать кучу репозиториев и тд, чтобы код доходил до последующих методов, чтобы покрыть весь код.

Если методы выставляем на протектед, то такая проблема отпадает. И если кто то поменяет в главном паблик методе порядок выполнения private методов, тесты не упадут.

8 ответов

15 просмотров

тогда поменяй с private на package visible 🤷‍♂️

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

Ilya-Slezkin Автор вопроса
Роман Нагаев
есть ещё один вариант, вынести приватную логику в ...

привет Рома) думал кстати про абстрактный класс тоже)

Ilya Slezkin
привет Рома) думал кстати про абстрактный класс то...

Но он ничего не сказал про абстрактный класс

Ilya Slezkin
привет Рома) думал кстати про абстрактный класс то...

привет) не абстрактный, просто отдельный класс выполняющий мелкую функцию, возможно ограниченный интерфейсом

Ilya Slezkin
привет Рома) думал кстати про абстрактный класс то...

то что я предлагаю можно найти по фразам "чистая выдумка" и "паттерн стратегия"

Если приватный метод сильно сложный и в нём много условий, я бы сделал его package private и тестил бы отдельно. Но в то же время, тестировать приватные методы плохо тем, что они цементируют алгоритм, структуру класса. Если тест написан через публичный метод, то структуру класса можно менять как хочешь: переразбивать на методы, выносить что-то в другие классы и т.д. При тестировании приватных методов ничего такого сделать не выйдет. А зачем валидатору репозиторий? И тем более несколько репозиториев? Совсем из вакуума я валидатор представляю с одним методом, в котором проверяются всякие условия для конкретного типа данных. Что-то такое - VelocityValidator (скорость double, не отрицательное число), AgeValidator (возраст int в годах, например, от 18 до 45). Таким валидаторам не нужен репозиторий и их очень просто тестить. Есть возможность скинуть код такого кастомного валидатора, очень любопытно на него взглянуть?

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

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

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Всем привет, у меня есть сервер принимающий входящие HTTP подключения, как проверить, что подключение было через прокси или нет, есть какие то поля в заголовках по которым мо...
Кибер Бомж
8
Карта сайта