Предполагая, что мы реализуем с использованием TDD класс Stack
, нам потребуется для каждого бита функциональности нашего класса Stack добавить новый тест, который выполняет его:
[TestMethod] public void Should_Be_Empty_After_Instantiation()
[TestMethod] public void Should_Not_Be_Empty_After_Pushing_One_Item()
...
Теперь, с другой стороны, при выполнении юнит-тестов следует сосредоточиться на том, какое внешнее поведение должен обеспечить наш класс, поэтому набор юнит-тестов проверяет, выполнены ли все ожидаемые контракты для моего интерфейса стека.
Мой вопрос заключается в том, как совместить эти два аспекта.
Например, предполагая, что мой Stack
использует внутри себя массив с начальным размером 8, я хочу, чтобы он увеличивался, если мой пользователь хочет вставить 9-й элемент. Для добавления этой функции изменения размера я хочу иметь по крайней мере один тест, который управляет моим кодом класса в этом направлении (я прав?).
С другой стороны, это будет добавление юнит-теста (или это действительно юнит-тест?), Который не соответствует действующему контракту класса (я предполагаю, что пользователь не заботится о внутренняя реализация стека), но его реализация.
Итак, у нас есть поворот, который я не знаю, как решить. Я здесь путаю понятия?
Спасибо
Редактировать
После долгих поисков я пришел по следующей ссылке, которая, похоже, решает эту проблему:
http://stephenwalther.com/blog/archive/2009/04/11/tdd-tests-are-not-unit-tests.aspx