Читаем Экстремальное программирование: Разработка через тестирование полностью

Покончив с размышлениями, я удаляю изначальный тест и начинаю заново. «Похоже, заставить все эти три вещи работать одновременно – это слишком сложная задача. Однако если я вначале добьюсь успешной работы A, B и C, мне не составит труда заставить работать всю эту штуку целиком.» Иногда я действительно удаляю тест, однако в некоторых случаях я просто изменяю его имя так, чтобы оно начиналось на x, – в этом случае тестовый метод не будет выполнен. (Скажу вам по секрету, что иногда я вообще не трогаю изначальный тест. Да, да! Только т-с-с-с! Никому об этом не рассказывайте! Слава богу, в большинстве подобных случаев мне удается быстро заставить работать дочерний тест. Однако получается, что я в течение пары минут живу вместе с двумя сломанными тестами. Возможно, когда я так поступаю, я совершаю ошибку. Этот пережиток сохранился у меня с тех времен, когда я выполнял тестирование после завершения разработки или вообще не тестировал свой код.)

Попробуйте оба варианта. Прислушайтесь к своим ощущениям. Если у вас есть два сломанных теста, вы, как правило, начинаете программировать иначе. Делайте выводы.

Поддельный объект (Mock Object)

Как выполнять тестирование объекта, который базируется на сложном и тяжеловесном ресурсе? Создайте поддельную версию ресурса, которая будет возвращать константы.

Использование поддельных объектов – это тема для отдельной книги. Существует огромное количество материала, посвященного поддельным объектам[16]. Здесь я попытаюсь очень коротко познакомить читателей с этой концепцией.

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

Чтобы уменьшить количество проблем, рекомендуется в процессе тестирования отказаться от работы непосредственно с базой данных. Большинство тестов пишется в отношении объекта, который функционирует подобно базе данных, однако располагается в оперативной памяти.


public void testOrderLookup() {

Database db = new MockDatabase();

db.expectQuery("select order_no from Order where cust_no is 123");

db.returnResult(new String[] {"Order 2","Order 3"});

.

}


Если объект MockDatabase не принимает ожидаемого запроса, он генерирует исключение. Если запрос корректен, объект возвращает нечто, напоминающее результирующий набор данных, состоящий из нескольких постоянных строк.

Помимо высокой производительности и надежности поддельные объекты обладают еще одним преимуществом: читабельностью. Если вы работаете с реальной базой данных, заполненной реальными данными, в результате обработки запроса вы можете получить ответ, состоящий из 14 строк. Возможно, вам будет нелегко понять, откуда взялось число 14 и в чем, собственно, состоит смысл теста.

Если вы хотите воспользоваться поддельными объектами, не следует хранить тяжеловесные ресурсы в глобальных переменных (даже если они замаскированы с использованием шаблона «Одиночка» (Singleton)). Если вы так поступите, вам придется вначале настроить глобальный поддельный объект, затем выполнить тест, а затем позаботиться о том, чтобы вернуть поддельный объект в исходное состояние.

В свое время я очень строго следил за выполнением этого правила. Мы вместе с Массимо Арнольди (Massimo Arnoldi) разрабатывали код, который взаимодействовал с набором курсов обмена валют, хранящимся в глобальной переменной. Для разных тестов требовалось использовать разные наборы данных, и в некоторых случаях курсы обмена валют должны были быть разными для разных тестов. Вначале мы пытались использовать для тестирования глобальную переменную, однако в конце концов нас это утомило, и однажды утром (смелые решения, как правило, приходят ко мне по утрам) мы решили передавать объект Exchange (в котором хранились курсы обмена) в качестве параметра везде, где это было необходимо. Мы думали, что нам придется модифицировать сотни методов. Однако дело кончилось тем, что мы добавили дополнительный параметр в десять или пятнадцать методов и по ходу дела подчистили другие аспекты дизайна.

Шаблон поддельных объектов заставляет тщательно следить за видимостью объектов, снижая взаимозависимости между ними. Поддельные объекты добавляют в проект некоторый риск, – что, если поддельный объект ведет себя не так, как реальный объект? Чтобы снизить этот риск, вы можете разработать специальный набор тестов для поддельных объектов, которые должны быть выполнены в отношении реального объекта, чтобы убедиться в том, что имитация достаточно близка к оригиналу.

Самошунтирование (Self Shunt)

Как можно убедиться в том, что один объект корректно взаимодействует с другим? Заставьте тестируемый объект взаимодействовать не с целевым объектом, а с вашим тестом.

Перейти на страницу:

Все книги серии Библиотека программиста

Программист-фанатик
Программист-фанатик

В этой книге вы не найдете описания конкретных технологий, алгоритмов и языков программирования — ценность ее не в этом. Она представляет собой сборник практических советов и рекомендаций, касающихся ситуаций, с которыми порой сталкивается любой разработчик: отсутствие мотивации, выбор приоритетов, психология программирования, отношения с руководством и коллегами и многие другие. Подобные знания обычно приходят лишь в результате многолетнего опыта реальной работы. По большому счету перед вами — ярко и увлекательно написанное руководство, которое поможет быстро сделать карьеру в индустрии разработки ПО любому, кто поставил себе такую цель. Конечно, опытные программисты могут найти некоторые идеи автора достаточно очевидными, но и для таких найдутся темы, которые позволят пересмотреть устоявшиеся взгляды и выйти на новый уровень мастерства. Для тех же, кто только в самом начале своего пути как разработчика, чтение данной книги, несомненно, откроет широчайшие перспективы. Издательство выражает благодарность Шувалову А. В. и Курышеву А. И. за помощь в работе над книгой.

Чед Фаулер

Программирование, программы, базы данных / Программирование / Книги по IT

Похожие книги

Как справиться с компьютерной зависимостью
Как справиться с компьютерной зависимостью

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

Виктория Сергеевна Тундалева , Елена Вячеславовна Быковская , М О Носатова , Н Р Казарян , Светлана Викторовна Краснова

Зарубежная компьютерная, околокомпьютерная литература / Прочая компьютерная литература / Книги по IT
Цифровой журнал «Компьютерра» № 3
Цифровой журнал «Компьютерра» № 3

ОглавлениеBETT 2010: каким мир видит образование будущего? Автор: Сергей ВильяновКивино гнездо: Подбит на взлёте Автор: БЕРД КИВИПротиворакеты Поднебесной Автор: Ваннах МихаилИнтерактивное видео Автор: Максим РудольскийПочему Google уходит из Китая? Автор: Тимофей БахваловВасилий Щепетнёв: Усмиритель Хаоса или Последний декрет Ильича — 2 Автор: Василий ЩепетневКомпьютер в школе: панацея или плацебо? Автор: Сергей ВильяновNexus One — андроидный провал Автор: Фадеев МихаилWindows Mobile в шкуре Google Android Автор: Андрей КрупинОт 430 до 500 Вт: блоки питания на любой случай, часть 1 Автор: Константин ИвановМедиацентр Boxee: первый социальный Автор: Андрей КрупинГолубятня: Сидр № 1 Автор: Сергей ГолубицкийGoogle в КНР: взгляд с другой стороны Авторы: Алексей Стародымов, Марина ПелепецПочему чаевые не спасут онлайн Автор: Иван КошуриновСервисы деактивации троянов-вымогателей Автор: Андрей КрупинЛестница для предпринимателей Автор: Сергей ЕреминКивино гнездо: Сюжет из «Плейбоя» Автор: БЕРД КИВИВасилий Щепетнёв: Последний декрет Ильича Автор: Василий ЩепетневО судьбах Symbian Автор: Алексей СтародымовPackard Bell Easynote TJ65 — хорошо сбалансированный ноутбук Автор: Игорь ОсколковОнлайновые альтернативы Microsoft PowerPoint Автор: Андрей КрупинPanasonic Lumix DMC-TZ7: ультра-ZOOMО возможности предсказания будущего Автор: Ваннах МихаилЗарядись от солнца Автор: Константин ИвановDefenseWall Personal Firewall: очное знакомство Автор: Андрей КрупинЗа что могут посадить компьютерщика? Автор: Майор МышкинИ для VAS, и для нас Автор: Сергей ВильяновНовинки CES 2010. Избранное Автор: Алексей СтародымовГолубятня: Золотой ключик Автор: Сергей Голубицкий

Журнал «Компьютерра» , Коллектив Авторов , Компьютерра Журнал

Зарубежная компьютерная, околокомпьютерная литература / Прочая компьютерная литература / Книги по IT