Существует один аспект TDD, который я никогда не понимал полностью.
Предположим, кто-то попросил вас реализовать простой объект Stack. Если вы правильно разработали свой дизайн, вы получите минимальный и чистый API. Предположим: push()
, pop()
и isEmpty()
. Все, что больше, чем чрезмерное убийство спроса, и позволяет пользователю слишком много места, чтобы возиться с вашим кодом.
Итак, теперь давайте предположим, что вы хотите unit test ваш код. Как вы это делаете, если все ваши общедоступные методы - это только три показанные выше? Эти методы будут проходить тестирование до сих пор.
Таким образом, вы добавляете частные методы, которые вам совсем не помогают, поскольку они не видны в вашем случае unit test. Или вы делаете эти методы общественности и там идет ваш минималистичный API, который вы работали так тяжело. Теперь пользователь будет путаться со своим стеком, и ошибки обязательно появятся.
Как вы справляетесь с этой дилеммой для открытия общедоступных методов тестирования против чистого и простого API?
Изменить:, чтобы указать в правильном направлении. Было бы неплохо получить технические указатели (например, "использовать этот хак, чтобы открыть частные методы" и т.д.), но я очень более интересны более общие ответы относительно того, что из двух понятий более важно, и как вы подходите к этому вопросу.