Модульное тестирование и TDD

Модульное тестирование и TDD

TDD для начинающих https://blog.byndyu.ru/2010/01/tdd.html

89a0966b0f29e90ebf602a77e1349a6b?s=128

Alexander Byndyu

January 28, 2010
Tweet

Transcript

  1. Модульное тестирование и TDD Александр Бындю ByndyuSoft http://www.byndyu.ru 6-я конференция

    .NET разработчиков 28 апреля 2013 www.dotnetconf.ru
  2. 2 Модульное тестирование и TDD Обо мне 1. Владелец компании

    ByndyuSoft 2. Консультант по вопросам разработки приложений и организации работы IT компаний 3. Внештатный сотрудник Академии АйТи 4. Технический блог http://blog.byndyu.ru 5. Преподаю в ЮУрГУ 6. Организую конференции .NET-разработчиков http://www.dotnetconf.ru 7. Веду группу в Google Group по проблемам разработки приложений http://groups.google.com/dotnetconf
  3. 3 Модульное тестирование и TDD План 1. Модульное тестирование 2.

    Test-Driven Development 3. Работа с унаследованным кодом
  4. 4 Модульное тестирование и TDD Модульное тестирование (Unit Testing) 1.

    Использование xUnit-фреймворков 2. Mock-и и Stub-ы 3. Проверка состояния vs Проверка поведения 4. Именование тестов 5. Шаблон AAA 6. Организация тестов 7. Модульное тестирование и сильное связывание 8. СУБД и другое внешние окружение 9. Тестирование UI (шаблоны MVС и MVP) 10. Покрытие кода тестами 11. Время выполнения тестов, Continuous Integration 12. Полезные фреймворки и инструменты
  5. 5 Модульное тестирование и TDD 1. Использование xUnit-фреймворков • xUnit

    • MbUnit • NUnit • … Solution: UnitTestExamples.sln Проект: FirstUnitTests
  6. 6 Модульное тестирование и TDD Зачем нужны модульные тесты?

  7. 7 Модульное тестирование и TDD Характеристики Unit Test’ов 1. Независимость

    2. Повторяемость 3. Скорость 4. Автоматический запуск 5. Падение по одной причине Пишем пример нарушения каждого пункта 
  8. 8 Модульное тестирование и TDD СУБД и другое внешние окружение

    Модульные тесты полностью изолируют окружение. Влияет на: 1. скорость выполнения тестов 2. зависимость окружения 3. связанность в тестах
  9. 9 Модульное тестирование и TDD Mock-и и Stub-ы • Mock-объект

    (от англ. mock object, буквально: объект-пародия, объект-имитация) — тип объектов, реализующих заданные аспекты моделируемого программного окружения. • Stub (от англ. stub, буквально: заглушка)—объект или функцию, не выполняющая никакого осмысленного действия, возвращающая пустой результат или входные данные в неизменном виде.
  10. 10 Модульное тестирование и TDD Moчим объект Проверка состояния vs

    Проверка поведения Живой пример Solution: UnitTestExamples.sln Проект: MockExamples
  11. 11 Модульное тестирование и TDD Именование тестов 1. Что делает

    тест? 2. Что в результате ожидаем? Название содержит описание тестового сценария
  12. 12 Модульное тестирование и TDD Шаблон ААА // arrange Готовим

    данные для теста // act Выполняем действие, которое тестируем // assert Проверяем результат
  13. 13 Модульное тестирование и TDD Тестирование UI 1. Шаблон Model-View-Controller

    (MVC) 2. Шаблон Model-View-Presenter (MVP) 3. Шаблон Model-View-Presenter (MVVM) Живой пример Solution: MVPTests.sln
  14. 14 Модульное тестирование и TDD Модульное тестирование и сильное связывание

  15. 15 Модульное тестирование и TDD Покрытие кода тестами 1. dotCover

    2. NCover 3. OpenCover http://www.bullseye.com/paper.html
  16. 16 Модульное тестирование и TDD Время выполнения тестов, CI Разработчик

    пишет код Заливает изменений в систему контроля версий Интеграционная система (CI) находит изменения CI берет последнюю версию кода, компилирует и запускает модульные тесты CI оповещает всех об успехе или неудаче
  17. 17 Модульное тестирование и TDD Организация тестов 1. По сборкам

    2. По классам 3. По функциям
  18. 18 Модульное тестирование и TDD Разработка через тестирование (Test-Driven Development)

    • Мантра TDD: «red-green-refactor» • Пример использования • Границы применимости
  19. 19 Модульное тестирование и TDD Мантра TDD: «red-green-refactor»

  20. 20 Модульное тестирование и TDD Живые примеры

  21. 21 Модульное тестирование и TDD Цикл разработки 1. Сначала придумываем

    тест 2. Создаем недостающие объекты, чтобы проект компилировался 3. Запускаем тест и видим, что он не работает (красная полоса). Здесь появляется маячок, который подталкивает нас решать эту проблему. Хочу зелёную полоску! 4. Пишем код до тех пор, пока тест не сработает 5. Видим зелёную полоску и внутренне радуемся своей маленькой победе! 6. Рефакторим код, если это необходимо
  22. 22 Модульное тестирование и TDD Преимущества от TDD TDD Количество

    тестов Продуктивность Качество системы + + + + +
  23. 23 Модульное тестирование и TDD FAQ по TDD 1. Как

    протестировать приватные методы? 2. Надо ли стремиться покрыть код тестами на 100%? 3. Сначала нам надо написать много тестов, а потом исправлять их один за другим? 4. Как же мне протестировать взаимодействие с базой данных, работу с SMTP-сервером или файловой системой? 5. Как часто надо запускать все тесты?
  24. 24 Модульное тестирование и TDD Границы применимости 1. Изучение предметной

    области 2. Изучение технологии 3. Реализация алгоритмов 4. Добавление функциональности Сложности: 1. Рутинные задачи 2. Невозможность тестирования 3. Параллельные вычисления
  25. 25 Модульное тестирование и TDD Модификация существующей функциональности (исправление ошибок)

    Изменение функциональности: 1. Написать проходящие тесты 2. Сделать рефакторинг 3. Убедится, что не сломали
  26. 26 Модульное тестирование и TDD Ссылки • Книга Экстремальное программирование:

    разработка через тестирование • Видео Пример разработки приложения с помощью TDD • Статья TDD для начинающих. Ответы на популярные вопросы
  27. 27 Модульное тестирование и TDD Спасибо за внимание! Буду рад

    ответить на ваши вопросы лично или через: blog.byndyu.ru alexanderbyndyu alexander.byndyu@gmail.com