Но вопрос в том, насколько хорошо написать тест для приватных методов с использованием отражения?
Есть ли лучший способ достичь этой цели?
Самый распространенный подход - отказаться от этой цели.
Исторически TDD фокусировался на проверке поведения , а не на деталях реализации. Отчасти дело в том, что тесты дают нам свободу уверенно изменять внутренний дизайн кода, потому что тесты будут предупреждать нас о любых непреднамеренных изменениях в поведении.
Итак, если нам нужен тест, чтобы убедиться, что логика в каком-то частном методе верна, мы находим вариант использования для публичного API, который зависит от этой логики, и пишем тесты, которые измеряют поведение публичного API.
Мы можем откалибровать тест, введя временную ошибку в частный метод и проверив, что тест обнаруживает ошибку.
Сделав это, у нас есть возможность рефакторинга кода путем встраивания приватного метода; все тесты все равно должны пройти в этом случае, потому что мы не изменили поведение испытуемого - мы просто переместили детали.
Если вы собираетесь активно работать над улучшением внутреннего дизайна вашего приложения, тогда вам нужны тесты, которые отделены от этого внутреннего дизайна.