Download - AgileCamp'11 Новосибирск - Unit Tests
![Page 1: AgileCamp'11 Новосибирск - Unit Tests](https://reader033.vdocuments.pub/reader033/viewer/2022061213/547c1893b4af9f16628b458d/html5/thumbnails/1.jpg)
Unit Tests
Anton Katkov
![Page 2: AgileCamp'11 Новосибирск - Unit Tests](https://reader033.vdocuments.pub/reader033/viewer/2022061213/547c1893b4af9f16628b458d/html5/thumbnails/2.jpg)
Вопрос
• Кто знаком с Unit Test’ами?
![Page 3: AgileCamp'11 Новосибирск - Unit Tests](https://reader033.vdocuments.pub/reader033/viewer/2022061213/547c1893b4af9f16628b458d/html5/thumbnails/3.jpg)
Основные понятия
• Fixture• Test Case• Check• Test Suite
![Page 4: AgileCamp'11 Новосибирск - Unit Tests](https://reader033.vdocuments.pub/reader033/viewer/2022061213/547c1893b4af9f16628b458d/html5/thumbnails/4.jpg)
Цикл жизни Unit Test
1. Set up fixture2. Execute test scenario3. Check that everything worked properly
![Page 5: AgileCamp'11 Новосибирск - Unit Tests](https://reader033.vdocuments.pub/reader033/viewer/2022061213/547c1893b4af9f16628b458d/html5/thumbnails/5.jpg)
Специфика Unit Test для XP
• Нужен framework• Тестируется весь значимый код• Тесты хранятся в репозитории кода вместе с
кодом• Код без тестов не считается завершённым• В случае обнаружение бага пишется тест,
который обнаруживает его
![Page 6: AgileCamp'11 Новосибирск - Unit Tests](https://reader033.vdocuments.pub/reader033/viewer/2022061213/547c1893b4af9f16628b458d/html5/thumbnails/6.jpg)
Unit Test помогает …
• Тестировать• Формализовать требования• Определиться с архитектурой• Писать код• Отлаживать код• Выпускать релизы• Оптимизировать
![Page 7: AgileCamp'11 Новосибирск - Unit Tests](https://reader033.vdocuments.pub/reader033/viewer/2022061213/547c1893b4af9f16628b458d/html5/thumbnails/7.jpg)
ТЕСТИРУЕМАЯ АРХИТЕКТУРА
![Page 8: AgileCamp'11 Новосибирск - Unit Tests](https://reader033.vdocuments.pub/reader033/viewer/2022061213/547c1893b4af9f16628b458d/html5/thumbnails/8.jpg)
Нетестируемая архитектура
source: http://martinfowler.com/articles/injection.html
![Page 9: AgileCamp'11 Новосибирск - Unit Tests](https://reader033.vdocuments.pub/reader033/viewer/2022061213/547c1893b4af9f16628b458d/html5/thumbnails/9.jpg)
Тестируемая архитектура
source: http://martinfowler.com/articles/injection.html
![Page 10: AgileCamp'11 Новосибирск - Unit Tests](https://reader033.vdocuments.pub/reader033/viewer/2022061213/547c1893b4af9f16628b458d/html5/thumbnails/10.jpg)
IoC и DI
• Inversion of Control• Dependency Injection
![Page 11: AgileCamp'11 Новосибирск - Unit Tests](https://reader033.vdocuments.pub/reader033/viewer/2022061213/547c1893b4af9f16628b458d/html5/thumbnails/11.jpg)
Типы тестовых дублей
• Dummy – никогда реально не используется;• Fake – содержит упрощённую реализацию;• Stubs – возвращает заготовленный ответ,
иногда запоминает информацию по вызовам;
• Mocks – объекты, с запрограммированным ожиданием определённых вызов к ним;
![Page 12: AgileCamp'11 Новосибирск - Unit Tests](https://reader033.vdocuments.pub/reader033/viewer/2022061213/547c1893b4af9f16628b458d/html5/thumbnails/12.jpg)
ЗАПАХИ ТЕСТОВ
![Page 13: AgileCamp'11 Новосибирск - Unit Tests](https://reader033.vdocuments.pub/reader033/viewer/2022061213/547c1893b4af9f16628b458d/html5/thumbnails/13.jpg)
• Редко запускаются• Плохая изоляция
Медленные тесты
![Page 14: AgileCamp'11 Новосибирск - Unit Tests](https://reader033.vdocuments.pub/reader033/viewer/2022061213/547c1893b4af9f16628b458d/html5/thumbnails/14.jpg)
• Плохое тестирование• Плохой дизайн
Хрупкие тесты
![Page 15: AgileCamp'11 Новосибирск - Unit Tests](https://reader033.vdocuments.pub/reader033/viewer/2022061213/547c1893b4af9f16628b458d/html5/thumbnails/15.jpg)
• You aren’t gonna need it (YAGNI)• Опять плохой дизайн• Тест много знает о классе
Тест-”спагетти”
![Page 16: AgileCamp'11 Новосибирск - Unit Tests](https://reader033.vdocuments.pub/reader033/viewer/2022061213/547c1893b4af9f16628b458d/html5/thumbnails/16.jpg)
• Одна ошибка– много сломаных тестов• Don’t repeat yourself (DRY)
Эхо в горах
![Page 17: AgileCamp'11 Новосибирск - Unit Tests](https://reader033.vdocuments.pub/reader033/viewer/2022061213/547c1893b4af9f16628b458d/html5/thumbnails/17.jpg)
• Аккуратное использование моков• Использование интеграционных тестов
Чрезмерное доверие мокам
![Page 18: AgileCamp'11 Новосибирск - Unit Tests](https://reader033.vdocuments.pub/reader033/viewer/2022061213/547c1893b4af9f16628b458d/html5/thumbnails/18.jpg)
• Хрупкие медленные тесты с Эхо эффектом• Big setUp()• Правильное использования моков
Недостаточное доверие мокам
![Page 19: AgileCamp'11 Новосибирск - Unit Tests](https://reader033.vdocuments.pub/reader033/viewer/2022061213/547c1893b4af9f16628b458d/html5/thumbnails/19.jpg)
ЗАКЛЮЧЕНИЕ
![Page 20: AgileCamp'11 Новосибирск - Unit Tests](https://reader033.vdocuments.pub/reader033/viewer/2022061213/547c1893b4af9f16628b458d/html5/thumbnails/20.jpg)
Связь с другими практиками
• Коллективное владение кодом• Рефакторинг• Регулярные сборки
![Page 21: AgileCamp'11 Новосибирск - Unit Tests](https://reader033.vdocuments.pub/reader033/viewer/2022061213/547c1893b4af9f16628b458d/html5/thumbnails/21.jpg)
Часто можно слышать фразы
• «У нас нет времени на тесты, поэтому мы их не пишем»
• «Мы напишем тесты после того, как проект будет готов»