Примітка модератора: Тут вже розміщено 39 відповідей (деякі видалено). Перш ніж опублікувати свою відповідь, подумайте, чи можете ви додати щось важливе до дискусії. Ви більш ніж ймовірно просто повторюєте те, що вже сказав хтось інший.
Іноді в мене виникає потреба зробити приватний метод у загальнодоступному класі просто для того, щоб написати для нього кілька одиничних тестів.
Зазвичай це було б тому, що метод містить логіку, поділену між іншими методами в класі, і охайніше перевірити логіку самостійно, або інша причина могла бути можливою: я хочу перевірити логіку, що використовується в синхронних потоках, не турбуючись про проблеми з ниткою. .
Чи трапляються це інші люди, тому що мені не дуже подобається це робити ?? Я особисто думаю, що бонуси переважають над проблемами оприлюднення методу, який насправді не надає послуги поза класом ...
ОНОВЛЕННЯ
Спасибі за відповіді всім, схоже, викликали зацікавлення людей. Я думаю, що загальний консенсус тестування повинен відбуватися через загальнодоступний API, оскільки це єдиний спосіб використання класу, і я з цим згоден. Кілька випадків, про які я згадував вище, де я робив би це вище, були рідкісними випадками, і я вважав, що переваги цього робити варто.
Однак я можу бачити, що всі вказують на те, що це ніколи не повинно відбуватися. І коли я трохи більше замислююся над цим, я думаю, що зміна вашого коду для пристосування тестів є поганою ідеєю - адже я вважаю, що тестування певним чином є інструментом підтримки, а зміна системи на "інструмент підтримки", якщо ви хочете, є кричущою. погана практика.
@VisibileForTesting
примітку для виготовлення таких методів - я рекомендую зробити це так, щоб причина методу не була private
належним чином задокументована.