2015-01-25 2 views
0

Скажем, у меня есть класс, который хранит некоторые данные в «данных» частной переменной, например. массив. Существуют различные методы этого класса, использующие переменную данных и различные модульные тесты, тестирующие эти методы. Теперь по какой-то причине вы хотите изменить тип данных контейнера (например, карту вместо массива), которую нужно обрабатывать несколько иначе. Если вы просто изменяете тип данных из массива, чтобы отобразить весь код в методах, которые были сломаны, и каждый из них должен был бы изменить их все, прежде чем какие-либо модульные тесты будут снова запущены. Обычно это не то, что нужно. Итак, каков рекомендуемый способ сделать это итеративно, не нарушая сразу весь код?Каковы рекомендуемые способы реорганизации внутреннего представления класса?

+2

Err, да, это именно то, что нужно: вы применяете изменения до тех пор, пока код не будет компилироваться снова, вы запускаете тесты, и если они все равно пройдут, то вы не нарушили ожидаемое поведение класса, делая все эти изменения. Вы можете прокомментировать некоторые тела методов и сделать тесты пройденными один за другим, если хотите. Но тогда хорошо, что тесты, проверяющие вымощенные тела методов, терпят неудачу, не так ли? –

+0

«... весь код в методах разбивается, и каждый должен будет изменить их все ...», если ваши классы являются разумными и делают только одно, это не должно быть проблемой. Если вы делаете слишком много занятий, вы должны исправить это в первую очередь. – PeeHaa

+0

Хорошо, я просто подумал, что было бы лучше «всегда» иметь код для компиляции и проверки одного теста за другим. Очевидно, если я сначала нарушу код, а затем изменим код до тех пор, пока он не скомпилируется (это я предпочел скорее делать в меньших частях), я могу проверить тесты, и если они преуспеют, все будет в порядке. – user1304680

ответ

0

Ед. Испытания обычно проверяют внешнюю функциональность класса.

Поэтому рефакторинг классов «внутренности» не должен нарушать никаких тестов. (это одно из преимуществ тестирования.).

Многие IDE позволят вам сделать автоматический рефакторинг внутренних компонентов за один удар. но вы не указали язык или IDE, которые вы используете.

Если ваш класс настолько велик, что изменение типа данных создает «часы» работы, то вам, вероятно, следует рассмотреть возможность разбиения вашего класса на более мелкие биты функциональности до рефакторинга типа данных.

В качестве альтернативы вы можете использовать рефакторинг в кусках и попытаться сохранить стабильность класса и «прокомментировать» определение массива временно, чтобы сообщить вам, где вам нужно сосредоточиться.

+0

Проблема не в том, что что-либо нарушает тесты, но код не будет компилироваться после изменения внутренних компонентов. Автоматический рефакторинг std :: map в std :: vector с использованием C++ и eclipse cdt? – user1304680

+0

Ну, в этом случае вам нужно реорганизовать точку, в которой код будет скомпилирован снова, если вы помечаете свой вопрос своим языком и идеей, вы сможете получить более конкретный ответ. –

Смежные вопросы