Test Driven Development in .NET Applications

Anton Vidishchev
Anton Vidishchev.NET Team Leader en Edgar Online @ Ciklum
Test driven
development
in .NET Applications
                           Anton Vidishchev
                                      MCPD
                Team leader at Sigma Ukraine
                          @antonvidishchev
         Anton.Vidishchev@sigmaukraine.com
Обо мне
• Более 6 лет в .NET разработке
• Полгода практикую TDD
• Один из лидеров одесской .NET User Group
Содержание доклада
• Проблематика
• Основные принципы TDD
  • Преимущества
  • Недостатки
• Принципы тестирования кода
  • Unit tests, integration tests
  • Fakes, Mocks, Stubs, Dummies
• Практики применения
  • Тестирование DAL
  • Тестирование BLL
  • Тестирование GUI
• Tips & Tricks
Проблематика
• Баги в ПО обходятся экономике США в $59.5 млрд
  ежегодно
• В 2009 году отмененные проекты стоили компаниям
  $67млрд; превышения бюджета проектов обошлись в $21
  млрд
• В среднем профессиональные разработчики допускают от
  100 до 150 ошибок на 1000 написанных строк
• Стоимость исправления бага увеличивается в 10-100
  раз, если код попал в production
Мантра ТDD
Преимущества TDD
•   Повышает качество кода
•   Стимулирует стройность архитектуры
•   Повышает уверенность в написанном коде
•   Меньше времени тратится на отладку
•   Снижает количество багов в production-коде
•   Уверенность при рефакторинге
Недостатки TDD
• Сложность тестирования БД, сервисов
• Ошибочный тест ведет к ошибочному коду
• Тесты необходимо поддерживать
Что такое Unit-test
• Характеристики
  • Single responsibility
  • Малый размер
  • Изолированность
Ваш тест не является unit-
тестом, если:
• Тест взаимодействует с базой
• Тест использует сетевое взаимодействие
• Тест работает с файловой системой
• Тест не может быть запущен одновременно с любыми
  другими юнит-тестами
• Вам приходится специально настраивать среду
  выполнения (например редактировать конфигурационные
  файлы) для его выполнения.
Как изолировать тест от
зависимостей?
• Fakes, Test doubles
  Объекты-двойники, копирующие поведение заменяемого
  объекта. Например, in-memory база данных.
• Mocks
  Объекты, имитирующие поведение заменяемого объекта.
  Также позволяют проверить факт вызова методов
• Dummies
  Объекты-заглушки, передаваемые в качестве
  обязательных параметров, но не использующиеся в
  методах
• Stubs
  Заглушки. Helper-методы, имитирующие поведение
  объектов.
Практика применения
• Текущий проект
  •   ASP.NET MVC 3
  •   WCF REST services
  •   Entity Framework 4.0
  •   EF POCO Objects
  •   T4 Templates for Fake repository
  •   SQL Azure

  •   NUnit
  •   Moq
  •   Resharper
  •   dotCover
Тестирование DAL
• Используйте POCO объекты
• Используйте абстракции над контекстом:
  IRepository, IUnitOfWork
• Используйте in-memory fakes
• Пользуйтесь похожестью Linq to Objects и Linq to Entities
• Создавайте темплейты заполнения in-memory хранилища
  для разных тест-кейсов
• Используйте ObjectMother
• Тестируйте различия на Mock Objects
  (Например, SaveChanges() )
• …….
• PROFIT!
Тестирование DAL:
Integration Tests
• Если возможно, используйте unit-тесты на in-memory
  хранилище вместо integration-тестов
• Используйте sanity integration tests для проверки
  соответствия модели и схемы БД.
• Тестируйте хранимые процедуры
  • Sanity integration test для проверки маппинга
  • Старайтесь использовать эталонные C# методы для
    тестирования сложных процедур
Тестирование BLL
• Пишите тесты до имплементации логики!
• Используйте Dependency Injection/IoC контейнеры
• Избегайте хрупких тестов!
  • Старайтесь протестировать «как это работает», а не «что
    вызывается»
  • Старайтесь тестировать логику на test-doubles
Тестирование UI
•   Выделяйте стабильные/нестабильные зоны в UI
•   Используйте, по возможности, паттерны MVC/MVVM
•   Используйте Contrib-библиотеки (MVCContrib).
•   Тестируйте Routes
•   Тестируйте Controller
    •   Возвращаемый ActionResult
    •   Передаваемая модель
    •   Возвращаемое представление
    •   ModelState
Tips & Tricks
• Пишите короткие тесты
• Одна проверка – один тест
• Давайте тестам понятные названия
• Избегайте хрупких тестов
• Используйте Dependency Injection/IoC-контейнеры
• Следите за временем билда. Используйте Ndepend для его
  снижения
• Следите за временем выполнения тестов
• Разбивайте тесты на тест-кейсы
• Формализуйте Setup / TearDown
More improvements
• Используйте разные виды тестирования:
  •   UI tests
  •   Coded-UI tests
  •   Load tests
  •   Integration tests
• Используйте Continuous Integration
  • Выполняйте unit-тесты на каждом check-in
  • Выполняйте дорогие тесты ежедневно
Полезные фреймворки и
утилиты
• Unit testing
   • MSTest, Nunit
• Mocking
   • Moq, RhinoMocks
• Isolation and White box Unit Testing for .NET
   • Pex and Moles
• UI Testing
   • MS Test Manager, Selenium
• Continuous integration
   • TFS, TeamCity, Hudson/Jenkins, CruiseControl.NET
• DI/IoC
   • Unity, Spring.NET, Ninject
• Contribution projects
   • NUGET, MVCContrib
• Refactoring
   • Resharper
• Code Coverage
   • Visual Studio, dotCover
Полезные ссылки
• Kent Beck. Test Driven Development: By Example
  http://www.amazon.com/Test-Driven-Development-
  Kent-Beck/dp/0321146530/
• Testability and Entity Framework 4.0
  http://msdn.microsoft.com/en-
  us/library/ff714955.aspx
• Mocks aren’t Stubs. Martin Fowler
  http://martinfowler.com/articles/mocksArentStubs.ht
  ml
Вопросы
• Спасибо за внимание

• Антон Видищев
• @antonvidishchev
• Anton.Vidishchev@sigmaukraine.com
1 de 20

Recomendados

Лучшие практики на практике por
Лучшие практики на практикеЛучшие практики на практике
Лучшие практики на практикеDenis Tuchin
1.5K vistas42 diapositivas
Подводная часть айсберга: что делать, чтобы автотесты не превратились в Титаник por
Подводная часть айсберга: что делать, чтобы автотесты не превратились в ТитаникПодводная часть айсберга: что делать, чтобы автотесты не превратились в Титаник
Подводная часть айсберга: что делать, чтобы автотесты не превратились в ТитаникSQALab
1K vistas40 diapositivas
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group) por
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)Ontico
625 vistas48 diapositivas
Тестирование весна 2014 смешанное занятие 1 por
Тестирование весна 2014 смешанное занятие 1Тестирование весна 2014 смешанное занятие 1
Тестирование весна 2014 смешанное занятие 1Technopark
707 vistas68 diapositivas
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов por
Непрерывная интеграция и автотесты. Сравнительный анализ инструментовНепрерывная интеграция и автотесты. Сравнительный анализ инструментов
Непрерывная интеграция и автотесты. Сравнительный анализ инструментовSQALab
1.1K vistas19 diapositivas
Тестируем мобильное приложение в суровых реалиях Интернета por
Тестируем мобильное приложение в суровых реалиях ИнтернетаТестируем мобильное приложение в суровых реалиях Интернета
Тестируем мобильное приложение в суровых реалиях ИнтернетаSQALab
1.2K vistas116 diapositivas

Más contenido relacionado

La actualidad más candente

Автоматическое тестирование. Моя система por
Автоматическое тестирование. Моя системаАвтоматическое тестирование. Моя система
Автоматическое тестирование. Моя системаIgor Lyubin
201 vistas34 diapositivas
WP как экспериментальная платформа por
WP как экспериментальная платформаWP как экспериментальная платформа
WP как экспериментальная платформаSQALab
682 vistas41 diapositivas
Robot Framework: универсальный инструмент автоматизатора por
Robot Framework: универсальный инструмент автоматизатораRobot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатораSQALab
4.3K vistas25 diapositivas
Использование анализатора кода SonarQube por
Использование анализатора кода SonarQubeИспользование анализатора кода SonarQube
Использование анализатора кода SonarQubePositive Hack Days
1K vistas15 diapositivas
Повышение качества тестов и автоматическая валидация REST API документации por
Повышение качества тестов и автоматическая валидация REST API документацииПовышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документацииCEE-SEC(R)
1.5K vistas22 diapositivas
Инструмент ChangelogBuilder для автоматической подготовки Release Notes por
Инструмент ChangelogBuilder для автоматической подготовки Release NotesИнструмент ChangelogBuilder для автоматической подготовки Release Notes
Инструмент ChangelogBuilder для автоматической подготовки Release NotesPositive Hack Days
2.6K vistas26 diapositivas

La actualidad más candente(20)

Автоматическое тестирование. Моя система por Igor Lyubin
Автоматическое тестирование. Моя системаАвтоматическое тестирование. Моя система
Автоматическое тестирование. Моя система
Igor Lyubin201 vistas
WP как экспериментальная платформа por SQALab
WP как экспериментальная платформаWP как экспериментальная платформа
WP как экспериментальная платформа
SQALab682 vistas
Robot Framework: универсальный инструмент автоматизатора por SQALab
Robot Framework: универсальный инструмент автоматизатораRobot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатора
SQALab4.3K vistas
Использование анализатора кода SonarQube por Positive Hack Days
Использование анализатора кода SonarQubeИспользование анализатора кода SonarQube
Использование анализатора кода SonarQube
Positive Hack Days1K vistas
Повышение качества тестов и автоматическая валидация REST API документации por CEE-SEC(R)
Повышение качества тестов и автоматическая валидация REST API документацииПовышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документации
CEE-SEC(R)1.5K vistas
Инструмент ChangelogBuilder для автоматической подготовки Release Notes por Positive Hack Days
Инструмент ChangelogBuilder для автоматической подготовки Release NotesИнструмент ChangelogBuilder для автоматической подготовки Release Notes
Инструмент ChangelogBuilder для автоматической подготовки Release Notes
Positive Hack Days2.6K vistas
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F... por SQALab
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...
SQALab3.1K vistas
От экспериментального программирования к промышленному: путь длиной в 10 лет por Positive Hack Days
От экспериментального программирования к промышленному: путь длиной в 10 летОт экспериментального программирования к промышленному: путь длиной в 10 лет
От экспериментального программирования к промышленному: путь длиной в 10 лет
Positive Hack Days637 vistas
GUI-автоматизация в Telerik Test Studio por SQALab
GUI-автоматизация в Telerik Test StudioGUI-автоматизация в Telerik Test Studio
GUI-автоматизация в Telerik Test Studio
SQALab2.3K vistas
Автоматизация тестирования ролей и привилегий por SQALab
Автоматизация тестирования ролей и привилегийАвтоматизация тестирования ролей и привилегий
Автоматизация тестирования ролей и привилегий
SQALab1.5K vistas
Как 3 тестировщика играючи тестируют приложение для 10млн пользователей por SQALab
Как 3 тестировщика играючи тестируют приложение для 10млн пользователейКак 3 тестировщика играючи тестируют приложение для 10млн пользователей
Как 3 тестировщика играючи тестируют приложение для 10млн пользователей
SQALab2.6K vistas
Типовая сборка и деплой продуктов в Positive Technologies por Positive Hack Days
Типовая сборка и деплой продуктов в Positive TechnologiesТиповая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive Technologies
Positive Hack Days902 vistas
Solit 2013, Эволюция тестирования на Selenium, Мычко Алексей por solit
Solit 2013, Эволюция тестирования на Selenium, Мычко АлексейSolit 2013, Эволюция тестирования на Selenium, Мычко Алексей
Solit 2013, Эволюция тестирования на Selenium, Мычко Алексей
solit407 vistas
Альтернативные способы изучения программирования с нуля por COMAQA.BY
Альтернативные способы изучения программирования с нуляАльтернативные способы изучения программирования с нуля
Альтернативные способы изучения программирования с нуля
COMAQA.BY 4.5K vistas
Шаблоны проектирования нагрузочных скриптов por SQALab
Шаблоны проектирования нагрузочных скриптовШаблоны проектирования нагрузочных скриптов
Шаблоны проектирования нагрузочных скриптов
SQALab810 vistas
QA Fest 2016. Александр Неделяев. Браузерные помощники тестировщика por QAFest
QA Fest 2016. Александр Неделяев. Браузерные помощники тестировщикаQA Fest 2016. Александр Неделяев. Браузерные помощники тестировщика
QA Fest 2016. Александр Неделяев. Браузерные помощники тестировщика
QAFest3.2K vistas
Jenkins 2. Как сделать мажорный релиз и не развалить сообщество? por CEE-SEC(R)
Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?
Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?
CEE-SEC(R)682 vistas
серёжа пономарёв @ Kuchyn.com.ua junior java developer программируем по-взро... por Sergey Ponomarev
серёжа пономарёв @ Kuchyn.com.ua junior java developer  программируем по-взро...серёжа пономарёв @ Kuchyn.com.ua junior java developer  программируем по-взро...
серёжа пономарёв @ Kuchyn.com.ua junior java developer программируем по-взро...
Sergey Ponomarev559 vistas
Денис Чистяков: Workflow. Работа над проектом в Яндексе por Yandex
Денис Чистяков: Workflow. Работа над проектом в ЯндексеДенис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в Яндексе
Yandex3.4K vistas

Destacado

TDD для интеграции с БД легко и просто! por
TDD для интеграции с БД легко и просто!TDD для интеграции с БД легко и просто!
TDD для интеграции с БД легко и просто!Mikalai Alimenkou
3K vistas18 diapositivas
Tdd from the middle por
Tdd from the middleTdd from the middle
Tdd from the middlePavel Gabriel
416 vistas84 diapositivas
Portrait of professional developer 2.0 por
Portrait of professional developer 2.0Portrait of professional developer 2.0
Portrait of professional developer 2.0Mikalai Alimenkou
1.5K vistas30 diapositivas
Hibernate, how the magic is really done por
Hibernate, how the magic is really doneHibernate, how the magic is really done
Hibernate, how the magic is really doneMikalai Alimenkou
2.9K vistas21 diapositivas
The modern view on implementation of classic design patterns in Java por
The modern view on implementation of classic design patterns in JavaThe modern view on implementation of classic design patterns in Java
The modern view on implementation of classic design patterns in JavaMikalai Alimenkou
5.9K vistas54 diapositivas
Why testing take so long por
Why testing take so longWhy testing take so long
Why testing take so longMikalai Alimenkou
7.9K vistas25 diapositivas

Destacado(8)

TDD для интеграции с БД легко и просто! por Mikalai Alimenkou
TDD для интеграции с БД легко и просто!TDD для интеграции с БД легко и просто!
TDD для интеграции с БД легко и просто!
Mikalai Alimenkou3K vistas
Portrait of professional developer 2.0 por Mikalai Alimenkou
Portrait of professional developer 2.0Portrait of professional developer 2.0
Portrait of professional developer 2.0
Mikalai Alimenkou1.5K vistas
Hibernate, how the magic is really done por Mikalai Alimenkou
Hibernate, how the magic is really doneHibernate, how the magic is really done
Hibernate, how the magic is really done
Mikalai Alimenkou2.9K vistas
The modern view on implementation of classic design patterns in Java por Mikalai Alimenkou
The modern view on implementation of classic design patterns in JavaThe modern view on implementation of classic design patterns in Java
The modern view on implementation of classic design patterns in Java
Mikalai Alimenkou5.9K vistas
Great functional testing with WebDriver and Thucydides por Mikalai Alimenkou
Great functional testing with WebDriver and ThucydidesGreat functional testing with WebDriver and Thucydides
Great functional testing with WebDriver and Thucydides
Mikalai Alimenkou8.9K vistas

Similar a Test Driven Development in .NET Applications

Test driven development in net por
Test driven development in netTest driven development in net
Test driven development in netAlex Tumanoff
824 vistas19 diapositivas
Jubula – TDD UI QA Automation Tool por
Jubula – TDD UI QA Automation ToolJubula – TDD UI QA Automation Tool
Jubula – TDD UI QA Automation ToolCOMAQA.BY
726 vistas44 diapositivas
Юнит тестирование в Web. Как получать пользу и удовольствие. por
Юнит тестирование в Web. Как получать пользу и удовольствие.Юнит тестирование в Web. Как получать пользу и удовольствие.
Юнит тестирование в Web. Как получать пользу и удовольствие.Sergey Ryabenko
837 vistas32 diapositivas
DevOps guide for awesome quality assurance por
DevOps guide for awesome quality assuranceDevOps guide for awesome quality assurance
DevOps guide for awesome quality assuranceАнастасия Асеева
349 vistas86 diapositivas
Роман Кокин «Организация тестирования в больших командах» por
Роман Кокин «Организация тестирования в больших командах»Роман Кокин «Организация тестирования в больших командах»
Роман Кокин «Организация тестирования в больших командах»DataArt
751 vistas26 diapositivas
Workflow: работа над проектом в Яндексе por
Workflow: работа над проектом в ЯндексеWorkflow: работа над проектом в Яндексе
Workflow: работа над проектом в ЯндексеDenis Chistyakov
334 vistas26 diapositivas

Similar a Test Driven Development in .NET Applications(20)

Test driven development in net por Alex Tumanoff
Test driven development in netTest driven development in net
Test driven development in net
Alex Tumanoff824 vistas
Jubula – TDD UI QA Automation Tool por COMAQA.BY
Jubula – TDD UI QA Automation ToolJubula – TDD UI QA Automation Tool
Jubula – TDD UI QA Automation Tool
COMAQA.BY 726 vistas
Юнит тестирование в Web. Как получать пользу и удовольствие. por Sergey Ryabenko
Юнит тестирование в Web. Как получать пользу и удовольствие.Юнит тестирование в Web. Как получать пользу и удовольствие.
Юнит тестирование в Web. Как получать пользу и удовольствие.
Sergey Ryabenko837 vistas
Роман Кокин «Организация тестирования в больших командах» por DataArt
Роман Кокин «Организация тестирования в больших командах»Роман Кокин «Организация тестирования в больших командах»
Роман Кокин «Организация тестирования в больших командах»
DataArt751 vistas
Workflow: работа над проектом в Яндексе por Denis Chistyakov
Workflow: работа над проектом в ЯндексеWorkflow: работа над проектом в Яндексе
Workflow: работа над проектом в Яндексе
Denis Chistyakov334 vistas
QA Fes 2016. Анастасия Асеева. Роль тестирования в Devops por QAFest
QA Fes 2016. Анастасия Асеева. Роль тестирования в DevopsQA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
QA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
QAFest1.6K vistas
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0 por AlexeyParhomenko
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
AlexeyParhomenko2K vistas
Benefits of unit-testing and inversion of controll por Mykyta Hopkalo
Benefits of unit-testing and inversion of controllBenefits of unit-testing and inversion of controll
Benefits of unit-testing and inversion of controll
Mykyta Hopkalo372 vistas
Тест-план и исследовательское тестирование por Vasiliy Burov
Тест-план и исследовательское тестированиеТест-план и исследовательское тестирование
Тест-план и исследовательское тестирование
Vasiliy Burov1.2K vistas
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ por CEE-SEC(R)
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙСтановление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ
CEE-SEC(R)1.6K vistas
IT-шная история игрушек или feature-driven тестирование в действии por Gleb Rybalko
IT-шная история игрушек или feature-driven тестирование в действииIT-шная история игрушек или feature-driven тестирование в действии
IT-шная история игрушек или feature-driven тестирование в действии
Gleb Rybalko2.9K vistas
Continious integration-Automated Testing-Solid-Agile por Kairat Yussupov
Continious integration-Automated Testing-Solid-AgileContinious integration-Automated Testing-Solid-Agile
Continious integration-Automated Testing-Solid-Agile
Kairat Yussupov412 vistas
Automation from the trenches por Gleb Rybalko
Automation from the trenchesAutomation from the trenches
Automation from the trenches
Gleb Rybalko352 vistas
Тестирование весна 2013 лекция 5 por Technopark
Тестирование весна 2013 лекция 5Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5
Technopark438 vistas
2014.12.06 02 Екатерина Боброва — Тестируем сложные backend-ы por HappyDev
2014.12.06 02 Екатерина Боброва — Тестируем сложные backend-ы2014.12.06 02 Екатерина Боброва — Тестируем сложные backend-ы
2014.12.06 02 Екатерина Боброва — Тестируем сложные backend-ы
HappyDev356 vistas

Más de Anton Vidishchev

Windows Azure Storage: Overview, Internals, and Best Practices por
Windows Azure Storage: Overview, Internals, and Best PracticesWindows Azure Storage: Overview, Internals, and Best Practices
Windows Azure Storage: Overview, Internals, and Best PracticesAnton Vidishchev
4.5K vistas29 diapositivas
Developing Resilient Cloud Architecture por
Developing Resilient Cloud ArchitectureDeveloping Resilient Cloud Architecture
Developing Resilient Cloud ArchitectureAnton Vidishchev
563 vistas43 diapositivas
Windows Azure Active Directory: единая система безопасности для облачных серв... por
Windows Azure Active Directory: единая система безопасности для облачных серв...Windows Azure Active Directory: единая система безопасности для облачных серв...
Windows Azure Active Directory: единая система безопасности для облачных серв...Anton Vidishchev
379 vistas20 diapositivas
New Features in Windows Azure por
New Features in Windows AzureNew Features in Windows Azure
New Features in Windows AzureAnton Vidishchev
264 vistas40 diapositivas
Разработка мобильных приложений с помощью HTML5 и JavaScript por
Разработка мобильных приложений с помощью HTML5 и JavaScriptРазработка мобильных приложений с помощью HTML5 и JavaScript
Разработка мобильных приложений с помощью HTML5 и JavaScriptAnton Vidishchev
483 vistas27 diapositivas
Test Driven Development in ASP.NET MVC 3 por
Test Driven Development in ASP.NET MVC 3Test Driven Development in ASP.NET MVC 3
Test Driven Development in ASP.NET MVC 3Anton Vidishchev
1.9K vistas21 diapositivas

Más de Anton Vidishchev(10)

Windows Azure Storage: Overview, Internals, and Best Practices por Anton Vidishchev
Windows Azure Storage: Overview, Internals, and Best PracticesWindows Azure Storage: Overview, Internals, and Best Practices
Windows Azure Storage: Overview, Internals, and Best Practices
Anton Vidishchev4.5K vistas
Developing Resilient Cloud Architecture por Anton Vidishchev
Developing Resilient Cloud ArchitectureDeveloping Resilient Cloud Architecture
Developing Resilient Cloud Architecture
Anton Vidishchev563 vistas
Windows Azure Active Directory: единая система безопасности для облачных серв... por Anton Vidishchev
Windows Azure Active Directory: единая система безопасности для облачных серв...Windows Azure Active Directory: единая система безопасности для облачных серв...
Windows Azure Active Directory: единая система безопасности для облачных серв...
Anton Vidishchev379 vistas
Разработка мобильных приложений с помощью HTML5 и JavaScript por Anton Vidishchev
Разработка мобильных приложений с помощью HTML5 и JavaScriptРазработка мобильных приложений с помощью HTML5 и JavaScript
Разработка мобильных приложений с помощью HTML5 и JavaScript
Anton Vidishchev483 vistas
Test Driven Development in ASP.NET MVC 3 por Anton Vidishchev
Test Driven Development in ASP.NET MVC 3Test Driven Development in ASP.NET MVC 3
Test Driven Development in ASP.NET MVC 3
Anton Vidishchev1.9K vistas
Тестирование приложений с помощью Visual studio 2010 por Anton Vidishchev
Тестирование приложений с помощью Visual studio 2010Тестирование приложений с помощью Visual studio 2010
Тестирование приложений с помощью Visual studio 2010
Anton Vidishchev1.2K vistas
Идентификация и контроль доступа в приложениях Windows Azure por Anton Vidishchev
Идентификация и контроль доступа в приложениях Windows AzureИдентификация и контроль доступа в приложениях Windows Azure
Идентификация и контроль доступа в приложениях Windows Azure
Anton Vidishchev373 vistas
Continuous Deployments in Azure Web Sites por Anton Vidishchev
Continuous Deployments in Azure Web SitesContinuous Deployments in Azure Web Sites
Continuous Deployments in Azure Web Sites
Anton Vidishchev251 vistas
Windows Azure Overview (DevLab Odessa) por Anton Vidishchev
Windows Azure Overview (DevLab Odessa)Windows Azure Overview (DevLab Odessa)
Windows Azure Overview (DevLab Odessa)
Anton Vidishchev476 vistas

Test Driven Development in .NET Applications

  • 1. Test driven development in .NET Applications Anton Vidishchev MCPD Team leader at Sigma Ukraine @antonvidishchev Anton.Vidishchev@sigmaukraine.com
  • 2. Обо мне • Более 6 лет в .NET разработке • Полгода практикую TDD • Один из лидеров одесской .NET User Group
  • 3. Содержание доклада • Проблематика • Основные принципы TDD • Преимущества • Недостатки • Принципы тестирования кода • Unit tests, integration tests • Fakes, Mocks, Stubs, Dummies • Практики применения • Тестирование DAL • Тестирование BLL • Тестирование GUI • Tips & Tricks
  • 4. Проблематика • Баги в ПО обходятся экономике США в $59.5 млрд ежегодно • В 2009 году отмененные проекты стоили компаниям $67млрд; превышения бюджета проектов обошлись в $21 млрд • В среднем профессиональные разработчики допускают от 100 до 150 ошибок на 1000 написанных строк • Стоимость исправления бага увеличивается в 10-100 раз, если код попал в production
  • 6. Преимущества TDD • Повышает качество кода • Стимулирует стройность архитектуры • Повышает уверенность в написанном коде • Меньше времени тратится на отладку • Снижает количество багов в production-коде • Уверенность при рефакторинге
  • 7. Недостатки TDD • Сложность тестирования БД, сервисов • Ошибочный тест ведет к ошибочному коду • Тесты необходимо поддерживать
  • 8. Что такое Unit-test • Характеристики • Single responsibility • Малый размер • Изолированность
  • 9. Ваш тест не является unit- тестом, если: • Тест взаимодействует с базой • Тест использует сетевое взаимодействие • Тест работает с файловой системой • Тест не может быть запущен одновременно с любыми другими юнит-тестами • Вам приходится специально настраивать среду выполнения (например редактировать конфигурационные файлы) для его выполнения.
  • 10. Как изолировать тест от зависимостей? • Fakes, Test doubles Объекты-двойники, копирующие поведение заменяемого объекта. Например, in-memory база данных. • Mocks Объекты, имитирующие поведение заменяемого объекта. Также позволяют проверить факт вызова методов • Dummies Объекты-заглушки, передаваемые в качестве обязательных параметров, но не использующиеся в методах • Stubs Заглушки. Helper-методы, имитирующие поведение объектов.
  • 11. Практика применения • Текущий проект • ASP.NET MVC 3 • WCF REST services • Entity Framework 4.0 • EF POCO Objects • T4 Templates for Fake repository • SQL Azure • NUnit • Moq • Resharper • dotCover
  • 12. Тестирование DAL • Используйте POCO объекты • Используйте абстракции над контекстом: IRepository, IUnitOfWork • Используйте in-memory fakes • Пользуйтесь похожестью Linq to Objects и Linq to Entities • Создавайте темплейты заполнения in-memory хранилища для разных тест-кейсов • Используйте ObjectMother • Тестируйте различия на Mock Objects (Например, SaveChanges() ) • ……. • PROFIT!
  • 13. Тестирование DAL: Integration Tests • Если возможно, используйте unit-тесты на in-memory хранилище вместо integration-тестов • Используйте sanity integration tests для проверки соответствия модели и схемы БД. • Тестируйте хранимые процедуры • Sanity integration test для проверки маппинга • Старайтесь использовать эталонные C# методы для тестирования сложных процедур
  • 14. Тестирование BLL • Пишите тесты до имплементации логики! • Используйте Dependency Injection/IoC контейнеры • Избегайте хрупких тестов! • Старайтесь протестировать «как это работает», а не «что вызывается» • Старайтесь тестировать логику на test-doubles
  • 15. Тестирование UI • Выделяйте стабильные/нестабильные зоны в UI • Используйте, по возможности, паттерны MVC/MVVM • Используйте Contrib-библиотеки (MVCContrib). • Тестируйте Routes • Тестируйте Controller • Возвращаемый ActionResult • Передаваемая модель • Возвращаемое представление • ModelState
  • 16. Tips & Tricks • Пишите короткие тесты • Одна проверка – один тест • Давайте тестам понятные названия • Избегайте хрупких тестов • Используйте Dependency Injection/IoC-контейнеры • Следите за временем билда. Используйте Ndepend для его снижения • Следите за временем выполнения тестов • Разбивайте тесты на тест-кейсы • Формализуйте Setup / TearDown
  • 17. More improvements • Используйте разные виды тестирования: • UI tests • Coded-UI tests • Load tests • Integration tests • Используйте Continuous Integration • Выполняйте unit-тесты на каждом check-in • Выполняйте дорогие тесты ежедневно
  • 18. Полезные фреймворки и утилиты • Unit testing • MSTest, Nunit • Mocking • Moq, RhinoMocks • Isolation and White box Unit Testing for .NET • Pex and Moles • UI Testing • MS Test Manager, Selenium • Continuous integration • TFS, TeamCity, Hudson/Jenkins, CruiseControl.NET • DI/IoC • Unity, Spring.NET, Ninject • Contribution projects • NUGET, MVCContrib • Refactoring • Resharper • Code Coverage • Visual Studio, dotCover
  • 19. Полезные ссылки • Kent Beck. Test Driven Development: By Example http://www.amazon.com/Test-Driven-Development- Kent-Beck/dp/0321146530/ • Testability and Entity Framework 4.0 http://msdn.microsoft.com/en- us/library/ff714955.aspx • Mocks aren’t Stubs. Martin Fowler http://martinfowler.com/articles/mocksArentStubs.ht ml
  • 20. Вопросы • Спасибо за внимание • Антон Видищев • @antonvidishchev • Anton.Vidishchev@sigmaukraine.com

Notas del editor

  1. О себеОдесская группаХорошо, что происходят мероприятия
  2. Содержание, что мы будем обсуждать
  3. Выбирая как построить доклад, решил не вдаваться в евангелистические насторения