Предисловие | 10 |
Храбрость | 11 |
Благодарности | 15 |
От издательства | 16 |
Введение | 17 |
Часть I. На примере денег | 21 |
Глава 1. Мультивалютные деньги | 22 |
Глава 2. Вырождающиеся объекты | 29 |
Глава 3. Равенство для всех | 32 |
Глава 4. Данные должны быть закрытыми | 36 |
Глава 5. Поговорим о франках | 39 |
Глава 6. Равенство для всех, вторая серия | 42 |
Глава 7. Яблоки и апельсины | 47 |
Глава 8. Создание объектов | 49 |
Глава 9. Потребность в валюте | 53 |
Глава 10. Избавление от двух разных версий times() | 58 |
Глава 11. Корень всего зла | 63 |
Глава 12. Сложение, наконец-то | 66 |
Глава 13. Делаем реализацию реальной | 71 |
Глава 14. Обмен валюты | 76 |
Глава 15. Смешение валют | 81 |
Глава 16. Абстракция, наконец-то! | 85 |
Глава 17. Ретроспектива денежного примера | 89 |
Что дальше? | 89 |
Метафора | 90 |
Использование JUnit | 91 |
Метрики кода | 92 |
Процесс | 92 |
Качество тестов | 93 |
Последний взгляд назад | 95 |
|
Часть II. На примере xUnit | 97 |
Глава 18. Первые шаги на пути к xUnit | 98 |
Глава 19. Сервируем стол (метод setup) | 104 |
Глава 20. Убираем со стола (метод tearDown) | 108 |
Глава 21. Учёт и контроль | 112 |
Глава 22. Обработка несработавшего теста | 115 |
Глава 23. Оформляем тесты в набор | 118 |
Глава 24. Ретроспектива xUnit | 123 |
|
Часть III. Паттерны для разработки через тестирование | 125 |
Глава 25. Паттерны разработки, основанной на тестах | 126 |
Тест | 126 |
Изолированный тест (Isolated Test) | 128 |
Список тестов (Test List) | 129 |
Вначале тест (Test First) | 131 |
Вначале оператор assert (Assert First) | 132 |
Тестовые данные (Test Data) | 134 |
Понятные данные (Evident Data) | 135 |
Глава 26. Паттерны красной полосы | 136 |
One Step Test (Тест одного шага) | 136 |
Starter Test (Начальный тест) | 137 |
Explanation Test (Объясняющий тест) | 139 |
Learning Test (Тест для изучения) | 139 |
Another Test (Ещё один тест) | 140 |
Regression Test (Регрессионный тест) | 141 |
Break (Перерыв) | 141 |
Do over (Начать сначала) | 143 |
Cheap Desk, Nice Chair (Дешёвый стол, хорошие кресла) | 144 |
Глава 27. Паттерны тестирования | 145 |
Дочерний тест (Child Test) | 145 |
Mock Object (Поддельный объект) | 146 |
Self Shunt (Самошунтирование) | 147 |
Log String (Строка-журнал) | 149 |
Crush Test Dummy (Тестирование обработки ошибок) | 149 |
Broken Test (Сломанный тест) | 151 |
Clean Check-in (Чистый выпускаемый код) | 151 |
Глава 28. Паттерны зеленой полосы | 153 |
Fake It (Подделка) | 153 |
Triangulate (Триангуляция) | 155 |
Obvious Implementation (Очевидная реализация) | 156 |
One to Many (От одного ко многим) | 157 |
Глава 29. Паттерны xUnit | 159 |
Assertion | 159 |
Fixture (Фикстура) | 161 |
External Fixture (Внешняя фикстура) | 163 |
Test Method (Тестовый метод) | 164 |
Exception Test (Тест исключения) | 166 |
All Tests (Все тесты) | 166 |
Глава 30. Паттерны проектирования | 168 |
Command (Команда) | 170 |
Value Object (Объект-значение) | 170 |
Null Object (Нуль-объект) | 172 |
Template Method (Шаблонный метод) | 173 |
Pluggable Object (Встраиваемый объект) | 175 |
Pluggable Selector (Встраиваемый переключатель) | 176 |
Factory Method (Фабричный метод) | 178 |
Imposter (Самозванец) | 179 |
Composite (Компоновщик) | 180 |
Collecting Parameter (Накопление в параметре) | 182 |
Singleton (Одиночка) | 183 |
Глава 31. Рефакторинг | 184 |
Reconcile Differences (Согласование различий) | 184 |
Isolate Change (Изоляция изменений) | 185 |
Migrate Data (Миграция данных) | 186 |
Extract Method (Выделение метода) | 188 |
Inline Method (Встраивание метода) | 189 |
Extract Interface (Выделение интерфейса) | 190 |
Move Method (Перемещение метода) | 191 |
Method Object (Метод в объект) | 192 |
Add Parameter (Добавление параметра) | 193 |
Method Parameter to Constructor Parameter (Параметр метода в параметр конструктора) | 193 |
Глава 32. Развитие навыков TDD | 195 |
Насколько большими должны быть шаги? | 195 |
Что не подлежит тестированию? | 196 |
Как определить качество тестов? | 196 |
Каким образом TDD ведет к созданию инфраструктур? | 197 |
Сколько должно быть тестов? | 198 |
Когда следует удалять тесты? | 200 |
Каким образом язык программирования и среда разработки влияют на TDD? | 201 |
Можно ли использовать TDD для разработки крупномасштабных систем? | 201 |
Можно ли осуществлять разработку приложения исходя из тестов уровня приложения? | 202 |
Как можно перейти к использованию TDD в середине работы над проектом? | 203 |
Для кого предназначена методика TDD? | 204 |
Зависит ли эффективность TDD от начальных условий? | 205 |
Каким образом методика TDD связана с паттернами? | 205 |
Почему TDD работает? | 206 |
Что означает имя? | 208 |
Как методика TDD связана с практиками экстремального программирования? | 208 |
Нерешённые проблемы TDD | 210 |
|
Послесловие | 211 |
|
Приложение I. Диаграммы взаимовлияния | 213 |
Обратная связь | 214 |
Контроль над системой | 215 |
|
Приложение II. Фибоначчи | 217 |
|
Алфавитный указатель | 220 |