SlideShare a Scribd company logo
1 of 20
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

More Related Content

What's hot

Автоматическое тестирование. Моя система
Автоматическое тестирование. Моя системаАвтоматическое тестирование. Моя система
Автоматическое тестирование. Моя системаIgor Lyubin
 
WP как экспериментальная платформа
WP как экспериментальная платформаWP как экспериментальная платформа
WP как экспериментальная платформаSQALab
 
Robot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатораRobot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатораSQALab
 
Использование анализатора кода SonarQube
Использование анализатора кода SonarQubeИспользование анализатора кода SonarQube
Использование анализатора кода SonarQubePositive Hack Days
 
Повышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документацииПовышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документацииCEE-SEC(R)
 
Инструмент ChangelogBuilder для автоматической подготовки Release Notes
Инструмент ChangelogBuilder для автоматической подготовки Release NotesИнструмент ChangelogBuilder для автоматической подготовки Release Notes
Инструмент ChangelogBuilder для автоматической подготовки Release NotesPositive Hack Days
 
Юнит тестирование
Юнит тестированиеЮнит тестирование
Юнит тестированиеTatiana Borolyuk
 
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...SQALab
 
От экспериментального программирования к промышленному: путь длиной в 10 лет
От экспериментального программирования к промышленному: путь длиной в 10 летОт экспериментального программирования к промышленному: путь длиной в 10 лет
От экспериментального программирования к промышленному: путь длиной в 10 летPositive Hack Days
 
GUI-автоматизация в Telerik Test Studio
GUI-автоматизация в Telerik Test StudioGUI-автоматизация в Telerik Test Studio
GUI-автоматизация в Telerik Test StudioSQALab
 
Автоматизация тестирования ролей и привилегий
Автоматизация тестирования ролей и привилегийАвтоматизация тестирования ролей и привилегий
Автоматизация тестирования ролей и привилегийSQALab
 
Как 3 тестировщика играючи тестируют приложение для 10млн пользователей
Как 3 тестировщика играючи тестируют приложение для 10млн пользователейКак 3 тестировщика играючи тестируют приложение для 10млн пользователей
Как 3 тестировщика играючи тестируют приложение для 10млн пользователейSQALab
 
Типовая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive TechnologiesТиповая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive TechnologiesPositive Hack Days
 
Solit 2013, Эволюция тестирования на Selenium, Мычко Алексей
Solit 2013, Эволюция тестирования на Selenium, Мычко АлексейSolit 2013, Эволюция тестирования на Selenium, Мычко Алексей
Solit 2013, Эволюция тестирования на Selenium, Мычко Алексейsolit
 
Альтернативные способы изучения программирования с нуля
Альтернативные способы изучения программирования с нуляАльтернативные способы изучения программирования с нуля
Альтернативные способы изучения программирования с нуляCOMAQA.BY
 
Шаблоны проектирования нагрузочных скриптов
Шаблоны проектирования нагрузочных скриптовШаблоны проектирования нагрузочных скриптов
Шаблоны проектирования нагрузочных скриптовSQALab
 
QA Fest 2016. Александр Неделяев. Браузерные помощники тестировщика
QA Fest 2016. Александр Неделяев. Браузерные помощники тестировщикаQA Fest 2016. Александр Неделяев. Браузерные помощники тестировщика
QA Fest 2016. Александр Неделяев. Браузерные помощники тестировщикаQAFest
 
Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?
Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?
Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?CEE-SEC(R)
 
серёжа пономарёв @ Kuchyn.com.ua junior java developer программируем по-взро...
серёжа пономарёв @ Kuchyn.com.ua junior java developer  программируем по-взро...серёжа пономарёв @ Kuchyn.com.ua junior java developer  программируем по-взро...
серёжа пономарёв @ Kuchyn.com.ua junior java developer программируем по-взро...Sergey Ponomarev
 
Денис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в ЯндексеДенис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в ЯндексеYandex
 

What's hot (20)

Автоматическое тестирование. Моя система
Автоматическое тестирование. Моя системаАвтоматическое тестирование. Моя система
Автоматическое тестирование. Моя система
 
WP как экспериментальная платформа
WP как экспериментальная платформаWP как экспериментальная платформа
WP как экспериментальная платформа
 
Robot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатораRobot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатора
 
Использование анализатора кода SonarQube
Использование анализатора кода SonarQubeИспользование анализатора кода SonarQube
Использование анализатора кода SonarQube
 
Повышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документацииПовышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документации
 
Инструмент ChangelogBuilder для автоматической подготовки Release Notes
Инструмент ChangelogBuilder для автоматической подготовки Release NotesИнструмент ChangelogBuilder для автоматической подготовки Release Notes
Инструмент ChangelogBuilder для автоматической подготовки Release Notes
 
Юнит тестирование
Юнит тестированиеЮнит тестирование
Юнит тестирование
 
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...
 
От экспериментального программирования к промышленному: путь длиной в 10 лет
От экспериментального программирования к промышленному: путь длиной в 10 летОт экспериментального программирования к промышленному: путь длиной в 10 лет
От экспериментального программирования к промышленному: путь длиной в 10 лет
 
GUI-автоматизация в Telerik Test Studio
GUI-автоматизация в Telerik Test StudioGUI-автоматизация в Telerik Test Studio
GUI-автоматизация в Telerik Test Studio
 
Автоматизация тестирования ролей и привилегий
Автоматизация тестирования ролей и привилегийАвтоматизация тестирования ролей и привилегий
Автоматизация тестирования ролей и привилегий
 
Как 3 тестировщика играючи тестируют приложение для 10млн пользователей
Как 3 тестировщика играючи тестируют приложение для 10млн пользователейКак 3 тестировщика играючи тестируют приложение для 10млн пользователей
Как 3 тестировщика играючи тестируют приложение для 10млн пользователей
 
Типовая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive TechnologiesТиповая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive Technologies
 
Solit 2013, Эволюция тестирования на Selenium, Мычко Алексей
Solit 2013, Эволюция тестирования на Selenium, Мычко АлексейSolit 2013, Эволюция тестирования на Selenium, Мычко Алексей
Solit 2013, Эволюция тестирования на Selenium, Мычко Алексей
 
Альтернативные способы изучения программирования с нуля
Альтернативные способы изучения программирования с нуляАльтернативные способы изучения программирования с нуля
Альтернативные способы изучения программирования с нуля
 
Шаблоны проектирования нагрузочных скриптов
Шаблоны проектирования нагрузочных скриптовШаблоны проектирования нагрузочных скриптов
Шаблоны проектирования нагрузочных скриптов
 
QA Fest 2016. Александр Неделяев. Браузерные помощники тестировщика
QA Fest 2016. Александр Неделяев. Браузерные помощники тестировщикаQA Fest 2016. Александр Неделяев. Браузерные помощники тестировщика
QA Fest 2016. Александр Неделяев. Браузерные помощники тестировщика
 
Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?
Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?
Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?
 
серёжа пономарёв @ Kuchyn.com.ua junior java developer программируем по-взро...
серёжа пономарёв @ Kuchyn.com.ua junior java developer  программируем по-взро...серёжа пономарёв @ Kuchyn.com.ua junior java developer  программируем по-взро...
серёжа пономарёв @ Kuchyn.com.ua junior java developer программируем по-взро...
 
Денис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в ЯндексеДенис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в Яндексе
 

Viewers also liked

TDD для интеграции с БД легко и просто!
TDD для интеграции с БД легко и просто!TDD для интеграции с БД легко и просто!
TDD для интеграции с БД легко и просто!Mikalai Alimenkou
 
Portrait of professional developer 2.0
Portrait of professional developer 2.0Portrait of professional developer 2.0
Portrait of professional developer 2.0Mikalai Alimenkou
 
Hibernate, how the magic is really done
Hibernate, how the magic is really doneHibernate, how the magic is really done
Hibernate, how the magic is really doneMikalai Alimenkou
 
The modern view on implementation of classic design patterns in Java
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
 
Great functional testing with WebDriver and Thucydides
Great functional testing with WebDriver and ThucydidesGreat functional testing with WebDriver and Thucydides
Great functional testing with WebDriver and ThucydidesMikalai Alimenkou
 
Hibernate performance tuning
Hibernate performance tuningHibernate performance tuning
Hibernate performance tuningMikalai Alimenkou
 

Viewers also liked (8)

TDD для интеграции с БД легко и просто!
TDD для интеграции с БД легко и просто!TDD для интеграции с БД легко и просто!
TDD для интеграции с БД легко и просто!
 
Tdd from the middle
Tdd from the middleTdd from the middle
Tdd from the middle
 
Portrait of professional developer 2.0
Portrait of professional developer 2.0Portrait of professional developer 2.0
Portrait of professional developer 2.0
 
Hibernate, how the magic is really done
Hibernate, how the magic is really doneHibernate, how the magic is really done
Hibernate, how the magic is really done
 
The modern view on implementation of classic design patterns in Java
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
 
Why testing take so long
Why testing take so longWhy testing take so long
Why testing take so long
 
Great functional testing with WebDriver and Thucydides
Great functional testing with WebDriver and ThucydidesGreat functional testing with WebDriver and Thucydides
Great functional testing with WebDriver and Thucydides
 
Hibernate performance tuning
Hibernate performance tuningHibernate performance tuning
Hibernate performance tuning
 

Similar to Test Driven Development in .NET Applications

Test driven development in net
Test driven development in netTest driven development in net
Test driven development in netAlex Tumanoff
 
Jubula – TDD UI QA Automation Tool
Jubula – TDD UI QA Automation ToolJubula – TDD UI QA Automation Tool
Jubula – TDD UI QA Automation ToolCOMAQA.BY
 
Юнит тестирование в Web. Как получать пользу и удовольствие.
Юнит тестирование в Web. Как получать пользу и удовольствие.Юнит тестирование в Web. Как получать пользу и удовольствие.
Юнит тестирование в Web. Как получать пользу и удовольствие.Sergey Ryabenko
 
Роман Кокин «Организация тестирования в больших командах»
Роман Кокин «Организация тестирования в больших командах»Роман Кокин «Организация тестирования в больших командах»
Роман Кокин «Организация тестирования в больших командах»DataArt
 
Workflow: работа над проектом в Яндексе
Workflow: работа над проектом в ЯндексеWorkflow: работа над проектом в Яндексе
Workflow: работа над проектом в ЯндексеDenis Chistyakov
 
QA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
QA Fes 2016. Анастасия Асеева. Роль тестирования в DevopsQA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
QA Fes 2016. Анастасия Асеева. Роль тестирования в DevopsQAFest
 
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0AlexeyParhomenko
 
Benefits of unit-testing and inversion of controll
Benefits of unit-testing and inversion of controllBenefits of unit-testing and inversion of controll
Benefits of unit-testing and inversion of controllMykyta Hopkalo
 
Тест-план и исследовательское тестирование
Тест-план и исследовательское тестированиеТест-план и исследовательское тестирование
Тест-план и исследовательское тестированиеVasiliy Burov
 
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙСтановление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙCEE-SEC(R)
 
IT-шная история игрушек или feature-driven тестирование в действии
IT-шная история игрушек или feature-driven тестирование в действииIT-шная история игрушек или feature-driven тестирование в действии
IT-шная история игрушек или feature-driven тестирование в действииGleb Rybalko
 
Continious integration-Automated Testing-Solid-Agile
Continious integration-Automated Testing-Solid-AgileContinious integration-Automated Testing-Solid-Agile
Continious integration-Automated Testing-Solid-AgileKairat Yussupov
 
Automation from the trenches
Automation from the trenchesAutomation from the trenches
Automation from the trenchesGleb Rybalko
 
Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5Technopark
 
2014.12.06 02 Екатерина Боброва — Тестируем сложные backend-ы
2014.12.06 02 Екатерина Боброва — Тестируем сложные backend-ы2014.12.06 02 Екатерина Боброва — Тестируем сложные backend-ы
2014.12.06 02 Екатерина Боброва — Тестируем сложные backend-ыHappyDev
 

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

Test driven development in net
Test driven development in netTest driven development in net
Test driven development in net
 
Jubula – TDD UI QA Automation Tool
Jubula – TDD UI QA Automation ToolJubula – TDD UI QA Automation Tool
Jubula – TDD UI QA Automation Tool
 
Юнит тестирование в Web. Как получать пользу и удовольствие.
Юнит тестирование в Web. Как получать пользу и удовольствие.Юнит тестирование в Web. Как получать пользу и удовольствие.
Юнит тестирование в Web. Как получать пользу и удовольствие.
 
DevOps guide for awesome quality assurance
DevOps guide for awesome quality assuranceDevOps guide for awesome quality assurance
DevOps guide for awesome quality assurance
 
Роман Кокин «Организация тестирования в больших командах»
Роман Кокин «Организация тестирования в больших командах»Роман Кокин «Организация тестирования в больших командах»
Роман Кокин «Организация тестирования в больших командах»
 
Workflow: работа над проектом в Яндексе
Workflow: работа над проектом в ЯндексеWorkflow: работа над проектом в Яндексе
Workflow: работа над проектом в Яндексе
 
QA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
QA Fes 2016. Анастасия Асеева. Роль тестирования в DevopsQA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
QA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
 
QAFest. Роль тестирования в Devops
QAFest. Роль тестирования в DevopsQAFest. Роль тестирования в Devops
QAFest. Роль тестирования в Devops
 
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
 
Benefits of unit-testing and inversion of controll
Benefits of unit-testing and inversion of controllBenefits of unit-testing and inversion of controll
Benefits of unit-testing and inversion of controll
 
Тест-план и исследовательское тестирование
Тест-план и исследовательское тестированиеТест-план и исследовательское тестирование
Тест-план и исследовательское тестирование
 
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙСтановление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ
 
IT-шная история игрушек или feature-driven тестирование в действии
IT-шная история игрушек или feature-driven тестирование в действииIT-шная история игрушек или feature-driven тестирование в действии
IT-шная история игрушек или feature-driven тестирование в действии
 
Continious integration-Automated Testing-Solid-Agile
Continious integration-Automated Testing-Solid-AgileContinious integration-Automated Testing-Solid-Agile
Continious integration-Automated Testing-Solid-Agile
 
Automation from the trenches
Automation from the trenchesAutomation from the trenches
Automation from the trenches
 
Automation from the trenches
Automation from the trenchesAutomation from the trenches
Automation from the trenches
 
Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5
 
Solid code via tdd
Solid code via tddSolid code via tdd
Solid code via tdd
 
Wgforge CI/CD
Wgforge CI/CDWgforge CI/CD
Wgforge CI/CD
 
2014.12.06 02 Екатерина Боброва — Тестируем сложные backend-ы
2014.12.06 02 Екатерина Боброва — Тестируем сложные backend-ы2014.12.06 02 Екатерина Боброва — Тестируем сложные backend-ы
2014.12.06 02 Екатерина Боброва — Тестируем сложные backend-ы
 

More from Anton Vidishchev

Windows Azure Storage: Overview, Internals, and Best Practices
Windows Azure Storage: Overview, Internals, and Best PracticesWindows Azure Storage: Overview, Internals, and Best Practices
Windows Azure Storage: Overview, Internals, and Best PracticesAnton Vidishchev
 
Developing Resilient Cloud Architecture
Developing Resilient Cloud ArchitectureDeveloping Resilient Cloud Architecture
Developing Resilient Cloud ArchitectureAnton Vidishchev
 
Windows Azure Active Directory: единая система безопасности для облачных серв...
Windows Azure Active Directory: единая система безопасности для облачных серв...Windows Azure Active Directory: единая система безопасности для облачных серв...
Windows Azure Active Directory: единая система безопасности для облачных серв...Anton Vidishchev
 
New Features in Windows Azure
New Features in Windows AzureNew Features in Windows Azure
New Features in Windows AzureAnton Vidishchev
 
Разработка мобильных приложений с помощью HTML5 и JavaScript
Разработка мобильных приложений с помощью HTML5 и JavaScriptРазработка мобильных приложений с помощью HTML5 и JavaScript
Разработка мобильных приложений с помощью HTML5 и JavaScriptAnton Vidishchev
 
Test Driven Development in ASP.NET MVC 3
Test Driven Development in ASP.NET MVC 3Test Driven Development in ASP.NET MVC 3
Test Driven Development in ASP.NET MVC 3Anton Vidishchev
 
Тестирование приложений с помощью Visual studio 2010
Тестирование приложений с помощью Visual studio 2010Тестирование приложений с помощью Visual studio 2010
Тестирование приложений с помощью Visual studio 2010Anton Vidishchev
 
Идентификация и контроль доступа в приложениях Windows Azure
Идентификация и контроль доступа в приложениях Windows AzureИдентификация и контроль доступа в приложениях Windows Azure
Идентификация и контроль доступа в приложениях Windows AzureAnton Vidishchev
 
Continuous Deployments in Azure Web Sites
Continuous Deployments in Azure Web SitesContinuous Deployments in Azure Web Sites
Continuous Deployments in Azure Web SitesAnton Vidishchev
 
Windows Azure Overview (DevLab Odessa)
Windows Azure Overview (DevLab Odessa)Windows Azure Overview (DevLab Odessa)
Windows Azure Overview (DevLab Odessa)Anton Vidishchev
 

More from Anton Vidishchev (10)

Windows Azure Storage: Overview, Internals, and Best Practices
Windows Azure Storage: Overview, Internals, and Best PracticesWindows Azure Storage: Overview, Internals, and Best Practices
Windows Azure Storage: Overview, Internals, and Best Practices
 
Developing Resilient Cloud Architecture
Developing Resilient Cloud ArchitectureDeveloping Resilient Cloud Architecture
Developing Resilient Cloud Architecture
 
Windows Azure Active Directory: единая система безопасности для облачных серв...
Windows Azure Active Directory: единая система безопасности для облачных серв...Windows Azure Active Directory: единая система безопасности для облачных серв...
Windows Azure Active Directory: единая система безопасности для облачных серв...
 
New Features in Windows Azure
New Features in Windows AzureNew Features in Windows Azure
New Features in Windows Azure
 
Разработка мобильных приложений с помощью HTML5 и JavaScript
Разработка мобильных приложений с помощью HTML5 и JavaScriptРазработка мобильных приложений с помощью HTML5 и JavaScript
Разработка мобильных приложений с помощью HTML5 и JavaScript
 
Test Driven Development in ASP.NET MVC 3
Test Driven Development in ASP.NET MVC 3Test Driven Development in ASP.NET MVC 3
Test Driven Development in ASP.NET MVC 3
 
Тестирование приложений с помощью Visual studio 2010
Тестирование приложений с помощью Visual studio 2010Тестирование приложений с помощью Visual studio 2010
Тестирование приложений с помощью Visual studio 2010
 
Идентификация и контроль доступа в приложениях Windows Azure
Идентификация и контроль доступа в приложениях Windows AzureИдентификация и контроль доступа в приложениях Windows Azure
Идентификация и контроль доступа в приложениях Windows Azure
 
Continuous Deployments in Azure Web Sites
Continuous Deployments in Azure Web SitesContinuous Deployments in Azure Web Sites
Continuous Deployments in Azure Web Sites
 
Windows Azure Overview (DevLab Odessa)
Windows Azure Overview (DevLab Odessa)Windows Azure Overview (DevLab Odessa)
Windows Azure Overview (DevLab Odessa)
 

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

Editor's Notes

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