2010-11-08 5 views
1

Я написал a method to standardize a USPS address. Чтобы проверить его, я хочу, чтобы open(URI.encode(uri)) в строке 45 возвращал макет, указанный ответ, если вы не подключены к Интернету и т. Д. Как мне это сделать с помощью Rspec? Нужно ли мне разбить метод на два?BDD, модульные испытания и шаблоны проектирования

Я прочь разбить методы на части, если я не повторно использую эти части. Если я просто использую его один раз, я просто включу его в функцию. Таким образом, я избегаю дополнительного вызова функции (причина не является дополнительными вызовами функций более неэффективными?). Это плохая идея?

Иногда проекты кода имеют очень много разных классов и функций и настолько модулярны и абстрактны, что мне становится сложнее понять. Я должен прыгать к различным функциям. Может быть, я должен использовать vim с ctags.

Но зачем разрушать функции, если вы не собираетесь повторно использовать разные части?

Я не читал Design Patterns еще, но я читаю книгу Cocoa Design Patterns.

Спасибо!

Matt

ответ

3

почему распадаются функции, если вы не будет повторно использовать различные части?

Для большей ясности, для удобства испытаний.

В обратном порядке: если у вас есть функция из двух частей, и она сломана, вы не знаете, какая часть сломана. Если вы выработали (и протестировали) части, вы узнаете, кто из них сломан (или что они оба, это могут быть некоторые из самых сложных ошибок, которые можно найти без очень небольших тестов очень маленьких функций). Это становится более правдивым, когда вы начинаете говорить, а не о двухчастных функциях, но о функциях с двадцатью или пятьюдесятью.

Что касается ясности, вы сказали, что для вас сложнее следовать, сложнее понять, с большим количеством классов и методов. Многие из нас считают, что наоборот. Крошечную функцию легко понять. Если он хорошо назван, его использование другой функцией также легко понять - и легче понять, чем если бы оно было встроено. Абстракция имеет решающее значение для хорошей разработки программного обеспечения; научиться любить его.

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