Cześć, zawsze czytałem i uważałem, że powinno się jak najmniej używać w programowaniu słowa public. Sam tworząc klasy robiłem zazwyczaj 1-2 metody publiczne, które faktycznie były używane na zewnątrz, a reszta leciała jako private. Starałem się nawet stosować bardziej rystrykcjne scope'y do klas, a nie tylko metod. Wydawało mi się to świetnym rozwiązaniem, aż nie zacząłem pisać do tego testów.
Przykładowo, klasa ma za zadanie na podstawie otrzymanych parametrów stworzyć zapytanie do bazy danych i je zwrocić. Parametrów może być od 1 do 10 i zapytanie się odpowiednio komplikuje, tak więc zrobiłem klasę która wystawiała dokładnie jedną metodę
public Query getQuery(CriteriaDTO dto) {
return prepareQuery(dto);
}
gdzie prepareQuery() to prywana metoda, która woła kolejne prywatne metody, ciągnące się na pozostałe kilkadziesiąt linijek danej klasy. Dodatkowo te metody wołają zewnętrzne klasy.
No i pojawił się problem, jak napisać testy do takiej klasy?
Powermockito i mockowanie prywatnych metod? Niby nie powinno się tego nadużywać.
Testowanie samego API czyli metody getQuery()?
Czy może jednak upublicznienie niektórych metod?