При кодировании с использованием TDD я создаю открытый интерфейс API для объекта. В вашем примере это означало бы, что мой интерфейс, который реализует класс, будет иметь только push()
, pop()
и isEmpty()
.
Однако тестирование этих методов путем вызова их сами по себе не является модульными тестами (подробнее об этом в конце этого поста) , поскольку они, скорее всего, проверяют взаимодействие нескольких внутренних методов, которые вместе дают желаемый результат, и вот в чем ваш вопрос: должны ли эти методы быть закрытыми?
Мой ответ - нет, используйте protected
(или эквивалент его на выбранном вами языке) вместо private
, что означает, что если ваш проект и тестовые POM структурированы аналогично, класс тестового набора может посмотрите внутри самого класса, так как они фактически находятся в одной папке. Это можно считать модульными тестами: вы тестируете функциональные блоки самого класса, а не их взаимодействие.
Что касается тестирования отдельных методов интерфейса / API, то, конечно же, важно сделать это, и я не оспариваю это, однако они находятся где-то между туманной линией модульного тестирования и принятия тестирование .
По моему мнению, самое важное, что следует помнить, это то, что модульные тесты сообщают вам, если метод ведет себя неправильно, приемочные тесты показывают, взаимодействует ли несколько методов / классов "неправильно", а интеграционное тестирование говорит о том, что совместимость нескольких систем операция ведет себя плохо.