Uwaga moderatora: opublikowano już 39 odpowiedzi (niektóre zostały usunięte). Przed wysłaniem swoją odpowiedź, należy rozważyć, czy można dodać coś sensownego do dyskusji. Prawdopodobnie powtarzasz to, co ktoś już powiedział.
Czasami muszę stworzyć metodę prywatną w klasie publicznej, aby napisać dla niej kilka testów jednostkowych.
Zwykle dzieje się tak, ponieważ metoda zawiera logikę współużytkowaną przez inne metody w klasie, a testowanie logiki we własnym zakresie jest łatwiejsze. Innym powodem może być testowanie logiki używanej w wątkach synchronicznych bez martwienia się o problemy z wątkami. .
Czy inni to robią, bo tak naprawdę nie lubię tego robić? Osobiście uważam, że bonusy przeważają nad problemem upublicznienia metody, która tak naprawdę nie zapewnia żadnej usługi poza klasą ...
AKTUALIZACJA
Dzięki za odpowiedzi wszystkim, wydaje się, że wzbudził zainteresowanie ludzi. Myślę, że ogólna zgoda co do testowania powinna odbywać się za pośrednictwem publicznego interfejsu API, ponieważ jest to jedyny sposób, w jaki klasa będzie kiedykolwiek używana, i zgadzam się z tym. Kilka przypadków, o których wspomniałem powyżej, w których chciałbym to zrobić powyżej, były rzadkimi przypadkami i uważałem, że korzyści płynące z robienia tego były tego warte.
Widzę jednak, że wszyscy twierdzą, że tak naprawdę nigdy nie powinno tak się stać. A kiedy myślę o tym trochę więcej, myślę, że zmiana kodu w celu dostosowania go do testów jest złym pomysłem - w końcu przypuszczam, że testowanie jest w pewien sposób narzędziem wsparcia, a zmiana systemu na „wsparcie narzędzia wsparcia”, jeśli chcesz, jest rażąca zła praktyka.
@VisibileForTesting
adnotacje do tworzenia takich metod - zalecam to zrobić, aby przyczyna niewłaściwej metody była private
odpowiednio udokumentowana.