методы по отдельности.
Есть 2 способа:
1) делать private методы, все-таки protected
2) использовать различные библиотеки или рефлексию
при первом варианте минусов не вижу.
при втором: дополнительные библиотеки, больше кода, хардкода
нормальная ли практика менять модификаторы доступа с private на protected в коммерческих проектах ради тестов?
Пример - есть кастомный класс валидатор, который просто делает различные проверки методами void...
порядок выполнения методов не важен, если для такого класса написать юнит тест, то приходится мокать кучу репозиториев и тд, чтобы код доходил до последующих методов, чтобы покрыть весь код.
Если методы выставляем на протектед, то такая проблема отпадает. И если кто то поменяет в главном паблик методе порядок выполнения private методов, тесты не упадут.
тогда поменяй с private на package visible 🤷♂️
есть ещё один вариант, вынести приватную логику в отдельный компонент введя абстракцию методы компонента будут скрыты не модификатором доступа метода а модификатором доступа поля в котором этот компонент лежит в другом бине получится что у тебя вообще не будет приватных методов
привет Рома) думал кстати про абстрактный класс тоже)
Но он ничего не сказал про абстрактный класс
привет) не абстрактный, просто отдельный класс выполняющий мелкую функцию, возможно ограниченный интерфейсом
то что я предлагаю можно найти по фразам "чистая выдумка" и "паттерн стратегия"
Если приватный метод сильно сложный и в нём много условий, я бы сделал его package private и тестил бы отдельно. Но в то же время, тестировать приватные методы плохо тем, что они цементируют алгоритм, структуру класса. Если тест написан через публичный метод, то структуру класса можно менять как хочешь: переразбивать на методы, выносить что-то в другие классы и т.д. При тестировании приватных методов ничего такого сделать не выйдет. А зачем валидатору репозиторий? И тем более несколько репозиториев? Совсем из вакуума я валидатор представляю с одним методом, в котором проверяются всякие условия для конкретного типа данных. Что-то такое - VelocityValidator (скорость double, не отрицательное число), AgeValidator (возраст int в годах, например, от 18 до 45). Таким валидаторам не нужен репозиторий и их очень просто тестить. Есть возможность скинуть код такого кастомного валидатора, очень любопытно на него взглянуть?
Обсуждают сегодня