SlideShare a Scribd company logo
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
Мантра ТDD
Преимущества TDD
•   Повышает качество кода
•   Стимулирует стройность архитектуры
•   Повышает уверенность в написанном коде
•   Меньше времени тратится на отладку
•   Снижает количество багов в production-коде
•   Уверенность при рефакторинге
Недостатки TDD
• Сложность тестирования БД, сервисов
• Ошибочный тест ведет к ошибочному коду
• Тесты необходимо поддерживать
Что такое Unit-test
• Характеристики
  • Single responsibility
  • Малый размер
  • Изолированность
Ваш тест не является unit-
тестом, если:
• Тест взаимодействует с базой
• Тест использует сетевое взаимодействие
• Тест работает с файловой системой
• Тест не может быть запущен одновременно с любыми
  другими юнит-тестами
• Вам приходится специально настраивать среду
  выполнения (например редактировать конфигурационные
  файлы) для его выполнения.
Как изолировать тест от
зависимостей?
• Fakes
  Объекты-двойники, копирующие поведение заменяемого
  объекта. Например, 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
Ad

More Related Content

What's hot (19)

vSphereTools - инструмент для автоматизации работы с vSphere | Тимур Гильмуллин
vSphereTools - инструмент для автоматизации работы с vSphere | Тимур ГильмуллинvSphereTools - инструмент для автоматизации работы с vSphere | Тимур Гильмуллин
vSphereTools - инструмент для автоматизации работы с vSphere | Тимур Гильмуллин
Positive Hack Days
 
Евгений Остапчук "Tips&Tricks for ASP.NET MVC performance"
Евгений Остапчук "Tips&Tricks for ASP.NET MVC performance"Евгений Остапчук "Tips&Tricks for ASP.NET MVC performance"
Евгений Остапчук "Tips&Tricks for ASP.NET MVC performance"
Fwdays
 
Инструментарий для создания дистрибутивов продуктов | Владимир Селин
Инструментарий для создания дистрибутивов продуктов | Владимир СелинИнструментарий для создания дистрибутивов продуктов | Владимир Селин
Инструментарий для создания дистрибутивов продуктов | Владимир Селин
Positive Hack Days
 
Cистемы автоматической сборки проектов (Полина Фоминых)
Cистемы автоматической сборки проектов (Полина Фоминых)Cистемы автоматической сборки проектов (Полина Фоминых)
Cистемы автоматической сборки проектов (Полина Фоминых)
Кафедра высокопроизводительных компьютерных технологий ИМКН УрФУ
 
Андрей Чебукин "Построение успешных API"
Андрей Чебукин "Построение успешных API"Андрей Чебукин "Построение успешных API"
Андрей Чебукин "Построение успешных API"
Fwdays
 
Александр Афенов
Александр АфеновАлександр Афенов
Александр Афенов
CodeFest
 
Winium — это как Selenium, только под Windows
Winium — это как Selenium, только под WindowsWinium — это как Selenium, только под Windows
Winium — это как Selenium, только под Windows
SQALab
 
Готовим Docker для Автоматизации Тестирования
Готовим Docker для Автоматизации ТестированияГотовим Docker для Автоматизации Тестирования
Готовим Docker для Автоматизации Тестирования
COMAQA.BY
 
Redux и изоморфные приложения
Redux и изоморфные приложенияRedux и изоморфные приложения
Redux и изоморфные приложения
John Wezel
 
Иван Крутов - Автоматизация сборки Java-проекта
Иван Крутов - Автоматизация сборки Java-проектаИван Крутов - Автоматизация сборки Java-проекта
Иван Крутов - Автоматизация сборки Java-проекта
Yandex
 
Нейронечёткая классификация слабо формализуемых данных | Тимур Гильмуллин
Нейронечёткая классификация слабо формализуемых данных | Тимур ГильмуллинНейронечёткая классификация слабо формализуемых данных | Тимур Гильмуллин
Нейронечёткая классификация слабо формализуемых данных | Тимур Гильмуллин
Positive Hack Days
 
Docker + Selenium Webdriver в рамках Continuous Integration
Docker + Selenium Webdriver в рамках Continuous IntegrationDocker + Selenium Webdriver в рамках Continuous Integration
Docker + Selenium Webdriver в рамках Continuous Integration
COMAQA.BY
 
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Ontico
 
Тестируем мобильное приложение в суровых реалиях Интернета
Тестируем мобильное приложение в суровых реалиях ИнтернетаТестируем мобильное приложение в суровых реалиях Интернета
Тестируем мобильное приложение в суровых реалиях Интернета
SQALab
 
Микросервисный фронтенд
Микросервисный фронтендМикросервисный фронтенд
Микросервисный фронтенд
Viacheslav Slinko
 
selenium stack in python
selenium stack in pythonselenium stack in python
selenium stack in python
COMAQA.BY
 
Денис Паясь
Денис ПаясьДенис Паясь
Денис Паясь
CodeFest
 
Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»
Yulia Tsisyk
 
vSphereTools - инструмент для автоматизации работы с vSphere | Тимур Гильмуллин
vSphereTools - инструмент для автоматизации работы с vSphere | Тимур ГильмуллинvSphereTools - инструмент для автоматизации работы с vSphere | Тимур Гильмуллин
vSphereTools - инструмент для автоматизации работы с vSphere | Тимур Гильмуллин
Positive Hack Days
 
Евгений Остапчук "Tips&Tricks for ASP.NET MVC performance"
Евгений Остапчук "Tips&Tricks for ASP.NET MVC performance"Евгений Остапчук "Tips&Tricks for ASP.NET MVC performance"
Евгений Остапчук "Tips&Tricks for ASP.NET MVC performance"
Fwdays
 
Инструментарий для создания дистрибутивов продуктов | Владимир Селин
Инструментарий для создания дистрибутивов продуктов | Владимир СелинИнструментарий для создания дистрибутивов продуктов | Владимир Селин
Инструментарий для создания дистрибутивов продуктов | Владимир Селин
Positive Hack Days
 
Андрей Чебукин "Построение успешных API"
Андрей Чебукин "Построение успешных API"Андрей Чебукин "Построение успешных API"
Андрей Чебукин "Построение успешных API"
Fwdays
 
Александр Афенов
Александр АфеновАлександр Афенов
Александр Афенов
CodeFest
 
Winium — это как Selenium, только под Windows
Winium — это как Selenium, только под WindowsWinium — это как Selenium, только под Windows
Winium — это как Selenium, только под Windows
SQALab
 
Готовим Docker для Автоматизации Тестирования
Готовим Docker для Автоматизации ТестированияГотовим Docker для Автоматизации Тестирования
Готовим Docker для Автоматизации Тестирования
COMAQA.BY
 
Redux и изоморфные приложения
Redux и изоморфные приложенияRedux и изоморфные приложения
Redux и изоморфные приложения
John Wezel
 
Иван Крутов - Автоматизация сборки Java-проекта
Иван Крутов - Автоматизация сборки Java-проектаИван Крутов - Автоматизация сборки Java-проекта
Иван Крутов - Автоматизация сборки Java-проекта
Yandex
 
Нейронечёткая классификация слабо формализуемых данных | Тимур Гильмуллин
Нейронечёткая классификация слабо формализуемых данных | Тимур ГильмуллинНейронечёткая классификация слабо формализуемых данных | Тимур Гильмуллин
Нейронечёткая классификация слабо формализуемых данных | Тимур Гильмуллин
Positive Hack Days
 
Docker + Selenium Webdriver в рамках Continuous Integration
Docker + Selenium Webdriver в рамках Continuous IntegrationDocker + Selenium Webdriver в рамках Continuous Integration
Docker + Selenium Webdriver в рамках Continuous Integration
COMAQA.BY
 
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Ontico
 
Тестируем мобильное приложение в суровых реалиях Интернета
Тестируем мобильное приложение в суровых реалиях ИнтернетаТестируем мобильное приложение в суровых реалиях Интернета
Тестируем мобильное приложение в суровых реалиях Интернета
SQALab
 
Микросервисный фронтенд
Микросервисный фронтендМикросервисный фронтенд
Микросервисный фронтенд
Viacheslav Slinko
 
selenium stack in python
selenium stack in pythonselenium stack in python
selenium stack in python
COMAQA.BY
 
Денис Паясь
Денис ПаясьДенис Паясь
Денис Паясь
CodeFest
 
Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»
Yulia Tsisyk
 

Viewers also liked (6)

Dependency injection with unity 2.0 Dmytro Mindra Lohika
Dependency injection with unity 2.0 Dmytro Mindra LohikaDependency injection with unity 2.0 Dmytro Mindra Lohika
Dependency injection with unity 2.0 Dmytro Mindra Lohika
Alex Tumanoff
 
Overview of PaaS: Java experience
Overview of PaaS: Java experienceOverview of PaaS: Java experience
Overview of PaaS: Java experience
Alex Tumanoff
 
Mike ponomarenko java17-fork-v1.2
Mike ponomarenko java17-fork-v1.2Mike ponomarenko java17-fork-v1.2
Mike ponomarenko java17-fork-v1.2
Alex Tumanoff
 
New features of Windows Phone 7.5
New features of Windows Phone 7.5New features of Windows Phone 7.5
New features of Windows Phone 7.5
Alex Tumanoff
 
Разработка расширений Firefox
Разработка расширений FirefoxРазработка расширений Firefox
Разработка расширений Firefox
Alex Tumanoff
 
JSF2
JSF2JSF2
JSF2
Alex Tumanoff
 
Dependency injection with unity 2.0 Dmytro Mindra Lohika
Dependency injection with unity 2.0 Dmytro Mindra LohikaDependency injection with unity 2.0 Dmytro Mindra Lohika
Dependency injection with unity 2.0 Dmytro Mindra Lohika
Alex Tumanoff
 
Overview of PaaS: Java experience
Overview of PaaS: Java experienceOverview of PaaS: Java experience
Overview of PaaS: Java experience
Alex Tumanoff
 
Mike ponomarenko java17-fork-v1.2
Mike ponomarenko java17-fork-v1.2Mike ponomarenko java17-fork-v1.2
Mike ponomarenko java17-fork-v1.2
Alex Tumanoff
 
New features of Windows Phone 7.5
New features of Windows Phone 7.5New features of Windows Phone 7.5
New features of Windows Phone 7.5
Alex Tumanoff
 
Разработка расширений Firefox
Разработка расширений FirefoxРазработка расширений Firefox
Разработка расширений Firefox
Alex Tumanoff
 
Ad

Similar to Test driven development in net (20)

Test Driven Development in .NET Applications
Test Driven Development in .NET ApplicationsTest Driven Development in .NET Applications
Test Driven Development in .NET Applications
Anton Vidishchev
 
Jubula – TDD UI QA Automation Tool
Jubula – TDD UI QA Automation ToolJubula – TDD UI QA Automation Tool
Jubula – TDD UI QA Automation Tool
COMAQA.BY
 
Повышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документацииПовышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документации
CEE-SEC(R)
 
Юнит тестирование в Web. Как получать пользу и удовольствие.
Юнит тестирование в Web. Как получать пользу и удовольствие.Юнит тестирование в Web. Как получать пользу и удовольствие.
Юнит тестирование в Web. Как получать пользу и удовольствие.
Sergey Ryabenko
 
Лучшие практики на практике
Лучшие практики на практикеЛучшие практики на практике
Лучшие практики на практике
Denis Tuchin
 
DevOps guide for awesome quality assurance
DevOps guide for awesome quality assuranceDevOps guide for awesome quality assurance
DevOps guide for awesome quality assurance
Анастасия Асеева
 
Роман Кокин «Организация тестирования в больших командах»
Роман Кокин «Организация тестирования в больших командах»Роман Кокин «Организация тестирования в больших командах»
Роман Кокин «Организация тестирования в больших командах»
DataArt
 
Solid code via tdd
Solid code via tddSolid code via tdd
Solid code via tdd
Serhiy Kalinets
 
Виталий Стрелюк
Виталий СтрелюкВиталий Стрелюк
Виталий Стрелюк
SQALab
 
QAFest. Роль тестирования в Devops
QAFest. Роль тестирования в DevopsQAFest. Роль тестирования в Devops
QAFest. Роль тестирования в Devops
Анастасия Асеева
 
QA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
QA Fes 2016. Анастасия Асеева. Роль тестирования в DevopsQA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
QA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
QAFest
 
Тест-план и исследовательское тестирование
Тест-план и исследовательское тестированиеТест-план и исследовательское тестирование
Тест-план и исследовательское тестирование
Vasiliy Burov
 
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙСтановление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ
CEE-SEC(R)
 
Web application testing architecture
Web application testing architectureWeb application testing architecture
Web application testing architecture
Andrey Lazarev
 
Workflow: работа над проектом в Яндексе
Workflow: работа над проектом в ЯндексеWorkflow: работа над проектом в Яндексе
Workflow: работа над проектом в Яндексе
Denis Chistyakov
 
Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5
Technopark
 
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
AlexeyParhomenko
 
Организация процесса тестирования в Agile команде с помощью матрицы квадранто...
Организация процесса тестирования в Agile команде с помощью матрицы квадранто...Организация процесса тестирования в Agile команде с помощью матрицы квадранто...
Организация процесса тестирования в Agile команде с помощью матрицы квадранто...
Zestranec
 
AgileCamp'11 Новосибирск - Unit Tests
AgileCamp'11 Новосибирск - Unit TestsAgileCamp'11 Новосибирск - Unit Tests
AgileCamp'11 Новосибирск - Unit Tests
Anton Katkov
 
Automation from the trenches
Automation from the trenchesAutomation from the trenches
Automation from the trenches
GlobalLogic Ukraine
 
Test Driven Development in .NET Applications
Test Driven Development in .NET ApplicationsTest Driven Development in .NET Applications
Test Driven Development in .NET Applications
Anton Vidishchev
 
Jubula – TDD UI QA Automation Tool
Jubula – TDD UI QA Automation ToolJubula – TDD UI QA Automation Tool
Jubula – TDD UI QA Automation Tool
COMAQA.BY
 
Повышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документацииПовышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документации
CEE-SEC(R)
 
Юнит тестирование в Web. Как получать пользу и удовольствие.
Юнит тестирование в Web. Как получать пользу и удовольствие.Юнит тестирование в Web. Как получать пользу и удовольствие.
Юнит тестирование в Web. Как получать пользу и удовольствие.
Sergey Ryabenko
 
Лучшие практики на практике
Лучшие практики на практикеЛучшие практики на практике
Лучшие практики на практике
Denis Tuchin
 
Роман Кокин «Организация тестирования в больших командах»
Роман Кокин «Организация тестирования в больших командах»Роман Кокин «Организация тестирования в больших командах»
Роман Кокин «Организация тестирования в больших командах»
DataArt
 
Виталий Стрелюк
Виталий СтрелюкВиталий Стрелюк
Виталий Стрелюк
SQALab
 
QA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
QA Fes 2016. Анастасия Асеева. Роль тестирования в DevopsQA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
QA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
QAFest
 
Тест-план и исследовательское тестирование
Тест-план и исследовательское тестированиеТест-план и исследовательское тестирование
Тест-план и исследовательское тестирование
Vasiliy Burov
 
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙСтановление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ
CEE-SEC(R)
 
Web application testing architecture
Web application testing architectureWeb application testing architecture
Web application testing architecture
Andrey Lazarev
 
Workflow: работа над проектом в Яндексе
Workflow: работа над проектом в ЯндексеWorkflow: работа над проектом в Яндексе
Workflow: работа над проектом в Яндексе
Denis Chistyakov
 
Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5
Technopark
 
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
AlexeyParhomenko
 
Организация процесса тестирования в Agile команде с помощью матрицы квадранто...
Организация процесса тестирования в Agile команде с помощью матрицы квадранто...Организация процесса тестирования в Agile команде с помощью матрицы квадранто...
Организация процесса тестирования в Agile команде с помощью матрицы квадранто...
Zestranec
 
AgileCamp'11 Новосибирск - Unit Tests
AgileCamp'11 Новосибирск - Unit TestsAgileCamp'11 Новосибирск - Unit Tests
AgileCamp'11 Новосибирск - Unit Tests
Anton Katkov
 
Ad

More from Alex Tumanoff (20)

Sql server 2019 New Features by Yevhen Nedaskivskyi
Sql server 2019 New Features by Yevhen NedaskivskyiSql server 2019 New Features by Yevhen Nedaskivskyi
Sql server 2019 New Features by Yevhen Nedaskivskyi
Alex Tumanoff
 
Odessa .net-user-group-sql-server-2019-hidden-gems by Denis Reznik
Odessa .net-user-group-sql-server-2019-hidden-gems by Denis ReznikOdessa .net-user-group-sql-server-2019-hidden-gems by Denis Reznik
Odessa .net-user-group-sql-server-2019-hidden-gems by Denis Reznik
Alex Tumanoff
 
Azure data bricks by Eugene Polonichko
Azure data bricks by Eugene PolonichkoAzure data bricks by Eugene Polonichko
Azure data bricks by Eugene Polonichko
Alex Tumanoff
 
Sdlc by Anatoliy Anthony Cox
Sdlc by  Anatoliy Anthony CoxSdlc by  Anatoliy Anthony Cox
Sdlc by Anatoliy Anthony Cox
Alex Tumanoff
 
Kostenko ux november-2014_1
Kostenko ux november-2014_1Kostenko ux november-2014_1
Kostenko ux november-2014_1
Alex Tumanoff
 
Java 8 in action.jinq.v.1.3
Java 8 in action.jinq.v.1.3Java 8 in action.jinq.v.1.3
Java 8 in action.jinq.v.1.3
Alex Tumanoff
 
"Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас...
"Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас..."Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас...
"Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас...
Alex Tumanoff
 
Spring.new hope.1.3
Spring.new hope.1.3Spring.new hope.1.3
Spring.new hope.1.3
Alex Tumanoff
 
Sql saturday azure storage by Anton Vidishchev
Sql saturday azure storage by Anton VidishchevSql saturday azure storage by Anton Vidishchev
Sql saturday azure storage by Anton Vidishchev
Alex Tumanoff
 
Navigation map factory by Alexey Klimenko
Navigation map factory by Alexey KlimenkoNavigation map factory by Alexey Klimenko
Navigation map factory by Alexey Klimenko
Alex Tumanoff
 
Serialization and performance by Sergey Morenets
Serialization and performance by Sergey MorenetsSerialization and performance by Sergey Morenets
Serialization and performance by Sergey Morenets
Alex Tumanoff
 
Игры для мобильных платформ by Алексей Рыбаков
Игры для мобильных платформ by Алексей РыбаковИгры для мобильных платформ by Алексей Рыбаков
Игры для мобильных платформ by Алексей Рыбаков
Alex Tumanoff
 
Android sync adapter
Android sync adapterAndroid sync adapter
Android sync adapter
Alex Tumanoff
 
Async clinic by by Sergey Teplyakov
Async clinic by by Sergey TeplyakovAsync clinic by by Sergey Teplyakov
Async clinic by by Sergey Teplyakov
Alex Tumanoff
 
Deep Dive C# by Sergey Teplyakov
Deep Dive  C# by Sergey TeplyakovDeep Dive  C# by Sergey Teplyakov
Deep Dive C# by Sergey Teplyakov
Alex Tumanoff
 
Bdd by Dmitri Aizenberg
Bdd by Dmitri AizenbergBdd by Dmitri Aizenberg
Bdd by Dmitri Aizenberg
Alex Tumanoff
 
Неформальные размышления о сертификации в IT
Неформальные размышления о сертификации в ITНеформальные размышления о сертификации в IT
Неформальные размышления о сертификации в IT
Alex Tumanoff
 
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So...
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So..."AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So...
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So...
Alex Tumanoff
 
Patterns of parallel programming
Patterns of parallel programmingPatterns of parallel programming
Patterns of parallel programming
Alex Tumanoff
 
Lambda выражения и Java 8
Lambda выражения и Java 8Lambda выражения и Java 8
Lambda выражения и Java 8
Alex Tumanoff
 
Sql server 2019 New Features by Yevhen Nedaskivskyi
Sql server 2019 New Features by Yevhen NedaskivskyiSql server 2019 New Features by Yevhen Nedaskivskyi
Sql server 2019 New Features by Yevhen Nedaskivskyi
Alex Tumanoff
 
Odessa .net-user-group-sql-server-2019-hidden-gems by Denis Reznik
Odessa .net-user-group-sql-server-2019-hidden-gems by Denis ReznikOdessa .net-user-group-sql-server-2019-hidden-gems by Denis Reznik
Odessa .net-user-group-sql-server-2019-hidden-gems by Denis Reznik
Alex Tumanoff
 
Azure data bricks by Eugene Polonichko
Azure data bricks by Eugene PolonichkoAzure data bricks by Eugene Polonichko
Azure data bricks by Eugene Polonichko
Alex Tumanoff
 
Sdlc by Anatoliy Anthony Cox
Sdlc by  Anatoliy Anthony CoxSdlc by  Anatoliy Anthony Cox
Sdlc by Anatoliy Anthony Cox
Alex Tumanoff
 
Kostenko ux november-2014_1
Kostenko ux november-2014_1Kostenko ux november-2014_1
Kostenko ux november-2014_1
Alex Tumanoff
 
Java 8 in action.jinq.v.1.3
Java 8 in action.jinq.v.1.3Java 8 in action.jinq.v.1.3
Java 8 in action.jinq.v.1.3
Alex Tumanoff
 
"Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас...
"Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас..."Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас...
"Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас...
Alex Tumanoff
 
Sql saturday azure storage by Anton Vidishchev
Sql saturday azure storage by Anton VidishchevSql saturday azure storage by Anton Vidishchev
Sql saturday azure storage by Anton Vidishchev
Alex Tumanoff
 
Navigation map factory by Alexey Klimenko
Navigation map factory by Alexey KlimenkoNavigation map factory by Alexey Klimenko
Navigation map factory by Alexey Klimenko
Alex Tumanoff
 
Serialization and performance by Sergey Morenets
Serialization and performance by Sergey MorenetsSerialization and performance by Sergey Morenets
Serialization and performance by Sergey Morenets
Alex Tumanoff
 
Игры для мобильных платформ by Алексей Рыбаков
Игры для мобильных платформ by Алексей РыбаковИгры для мобильных платформ by Алексей Рыбаков
Игры для мобильных платформ by Алексей Рыбаков
Alex Tumanoff
 
Android sync adapter
Android sync adapterAndroid sync adapter
Android sync adapter
Alex Tumanoff
 
Async clinic by by Sergey Teplyakov
Async clinic by by Sergey TeplyakovAsync clinic by by Sergey Teplyakov
Async clinic by by Sergey Teplyakov
Alex Tumanoff
 
Deep Dive C# by Sergey Teplyakov
Deep Dive  C# by Sergey TeplyakovDeep Dive  C# by Sergey Teplyakov
Deep Dive C# by Sergey Teplyakov
Alex Tumanoff
 
Bdd by Dmitri Aizenberg
Bdd by Dmitri AizenbergBdd by Dmitri Aizenberg
Bdd by Dmitri Aizenberg
Alex Tumanoff
 
Неформальные размышления о сертификации в IT
Неформальные размышления о сертификации в ITНеформальные размышления о сертификации в IT
Неформальные размышления о сертификации в IT
Alex Tumanoff
 
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So...
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So..."AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So...
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So...
Alex Tumanoff
 
Patterns of parallel programming
Patterns of parallel programmingPatterns of parallel programming
Patterns of parallel programming
Alex Tumanoff
 
Lambda выражения и Java 8
Lambda выражения и Java 8Lambda выражения и Java 8
Lambda выражения и Java 8
Alex Tumanoff
 

Test driven development in net

  • 1. Test driven development in .NET Applications Anton Vidishchev MCPD Team leader at Sigma Ukraine @antonvidishchev [email protected]
  • 2. Обо мне • Более 6 лет в .NET разработке • Полгода практикую TDD • Один из лидеров одесской .NET User Group
  • 3. Содержание доклада • Основные принципы TDD • Преимущества • Недостатки • Принципы тестирования кода • Unit tests, integration tests • Fakes, Mocks, Stubs, Dummies • Практики применения • Тестирование DAL • Тестирование BLL • Тестирование GUI • Tips & Tricks
  • 5. Преимущества TDD • Повышает качество кода • Стимулирует стройность архитектуры • Повышает уверенность в написанном коде • Меньше времени тратится на отладку • Снижает количество багов в production-коде • Уверенность при рефакторинге
  • 6. Недостатки TDD • Сложность тестирования БД, сервисов • Ошибочный тест ведет к ошибочному коду • Тесты необходимо поддерживать
  • 7. Что такое Unit-test • Характеристики • Single responsibility • Малый размер • Изолированность
  • 8. Ваш тест не является unit- тестом, если: • Тест взаимодействует с базой • Тест использует сетевое взаимодействие • Тест работает с файловой системой • Тест не может быть запущен одновременно с любыми другими юнит-тестами • Вам приходится специально настраивать среду выполнения (например редактировать конфигурационные файлы) для его выполнения.
  • 9. Как изолировать тест от зависимостей? • Fakes Объекты-двойники, копирующие поведение заменяемого объекта. Например, in-memory база данных. • Mocks Объекты, имитирующие поведение заменяемого объекта. Также позволяют проверить факт вызова методов • Dummies Объекты-заглушки, передаваемые в качестве обязательных параметров, но не использующиеся в методах • Stubs Заглушки. Helper-методы, имитирующие поведение объектов.
  • 10. Практика применения • Текущий проект • 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
  • 11. Тестирование DAL • Используйте POCO объекты • Используйте абстракции над контекстом: IRepository, IUnitOfWork • Используйте in-memory fakes • Пользуйтесь похожестью Linq to Objects и Linq to Entities • Создавайте темплейты заполнения in-memory хранилища для разных тест-кейсов • Используйте ObjectMother • Тестируйте различия на Mock Objects (Например, SaveChanges() ) • ……. • PROFIT!
  • 12. Тестирование DAL: Integration Tests • Если возможно, используйте unit-тесты на in-memory хранилище вместо integration-тестов • Используйте sanity integration tests для проверки соответствия модели и схемы БД. • Тестируйте хранимые процедуры • Sanity integration test для проверки маппинга • Старайтесь использовать эталонные C# методы для тестирования сложных процедур
  • 13. Тестирование BLL • Пишите тесты до имплементации логики! • Используйте Dependency Injection/IoC контейнеры • Избегайте хрупких тестов! • Старайтесь протестировать «как это работает», а не «что вызывается» • Старайтесь тестировать логику на test-doubles
  • 14. Тестирование UI • Выделяйте стабильные/нестабильные зоны в UI • Используйте, по возможности, паттерны MVC/MVVM • Используйте Contrib-библиотеки (MVCContrib). • Тестируйте Routes • Тестируйте Controller • Возвращаемый ActionResult • Передаваемая модель • Возвращаемое представление • ModelState
  • 15. Tips & Tricks • Пишите короткие тесты • Одна проверка – один тест • Давайте тестам понятные названия • Избегайте хрупких тестов • Используйте Dependency Injection/IoC-контейнеры • Следите за временем билда. Используйте Ndepend для его снижения • Следите за временем выполнения тестов • Разбивайте тесты на тест-кейсы • Формализуйте Setup / TearDown
  • 16. More improvements • Используйте разные виды тестирования: • UI tests • Coded-UI tests • Load tests • Integration tests • Используйте Continuous Integration • Выполняйте unit-тесты на каждом check-in • Выполняйте дорогие тесты ежедневно
  • 17. Полезные фреймворки и утилиты • 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
  • 18. Полезные ссылки • 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
  • 19. Вопросы • Спасибо за внимание • Антон Видищев • @antonvidishchev • [email protected]

Editor's Notes

  • #3: О себеОдесская группаХорошо, что происходят мероприятия
  • #4: Содержание, что мы будем обсуждать. Не будет евангелизма, обсудим плюсы и минусы, как начать использовать TDD