Хочу попробовать перейти к разработке через тестирование, и у меня возник ряд вопросов.
Самый основной вопрос - это как соблюдать инкапсуляцию данных и тесты?
Ну, например, если я пишу какого-то бота, который бегает по сайту и считает кол-во тегов на странице. У бота есть конструктор и парочку методов. Ну, например, методы мне не нужно использовать во внешней среде, и я делаю их приватными. Например у меня есть приватный метод, который собирает полный url адрес (например, он должен отсечь якоря, javascript:, из /test сделать
site.ru/test и др.), мне нужно его протестировать, но так как он приватный, я не могу этого сделать.
Есть вариант делать все необходимые методы для тестирования публичными, но там мы бьем по инкапсуляции, а если речь идет о каком-то суровом апи, где за такое можно получить по ушам, то это не вариант.
Если по думать о том, что можно взять класс теста и в качестве родительского класса использовать тестируемый класс, то тут 2 проблемы. Инкапсуляция страдает не так сильно (используем протектед методы), а в пхпюнит тестовые классы уже расширяют базовый класс
PHPUnit_Framework_TestCase.
Не хотелось бы начать изучать этот подход как-то неправильно. Я прочитал книжку про тдд, но там это дело не особо затронули и я не смог понять.
Так что же делать?