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

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

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

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

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

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

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

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

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

8 ответов

19 просмотров

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

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

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

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

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

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

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

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

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

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

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
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
Карта сайта