1) Если у вас есть унаследованный код, то единственный способ проверить закрытые методы - это рефлексия.
2) Если это новый код, у вас есть следующие опции:
- Использовать отражение (для сложных)
- Написать модульный тест в том же классе (делает рабочий код уродливым
с тестовым кодом также в нем)
- Рефакторинг и обнародование метода в некотором классе утилит
- Используйте аннотацию @VisibleForTesting и удалите приватную
Я предпочитаю метод аннотации, самый простой и наименее сложный. Единственная проблема заключается в том, что мы увеличили видимость, что, я думаю, не является большой проблемой.
Мы всегда должны кодировать интерфейс, поэтому если у нас есть интерфейс MyService и реализация MyServiceImpl, то у нас могут быть соответствующие тестовые классы, такие как MyServiceTest (методы интерфейса тестирования) и MyServiceImplTest (тестировать частные методы). В любом случае все клиенты должны использовать интерфейс таким образом, что хотя видимость приватного метода была увеличена, это не должно иметь большого значения.