Your SlideShare is downloading. ×
0
Test drivendevelopmentin .NET Applications                           Anton Vidishchev                                     ...
Обо мне• Более 6 лет в .NET разработке• Полгода практикую TDD• Один из лидеров одесской .NET User Group
Содержание доклада• Основные принципы TDD  • Преимущества  • Недостатки• Принципы тестирования кода  • Unit tests, integra...
Мантра ТDD
Преимущества TDD•   Повышает качество кода•   Стимулирует стройность архитектуры•   Повышает уверенность в написанном коде...
Недостатки TDD• Сложность тестирования БД, сервисов• Ошибочный тест ведет к ошибочному коду• Тесты необходимо поддерживать
Что такое Unit-test• Характеристики  • Single responsibility  • Малый размер  • Изолированность
Ваш тест не является unit-тестом, если:• Тест взаимодействует с базой• Тест использует сетевое взаимодействие• Тест работа...
Как изолировать тест отзависимостей?• Fakes  Объекты-двойники, копирующие поведение заменяемого  объекта. Например, in-mem...
Практика применения• Текущий проект  •   ASP.NET MVC 3  •   WCF REST services  •   Entity Framework 4.0  •   EF POCO Objec...
Тестирование DAL• Используйте POCO объекты• Используйте абстракции над контекстом: IRepository,  IUnitOfWork• Используйте ...
Тестирование DAL: IntegrationTests• Если возможно, используйте unit-тесты на in-memory  хранилище вместо integration-тесто...
Тестирование BLL• Пишите тесты до имплементации логики!• Используйте Dependency Injection/IoC контейнеры• Избегайте хрупки...
Тестирование UI•   Выделяйте стабильные/нестабильные зоны в UI•   Используйте, по возможности, паттерны MVC/MVVM•   Исполь...
Tips & Tricks• Пишите короткие тесты• Одна проверка – один тест• Давайте тестам понятные названия• Избегайте хрупких тесто...
More improvements• Используйте разные виды тестирования:  •   UI tests  •   Coded-UI tests  •   Load tests  •   Integratio...
Полезные фреймворки иутилиты• Unit testing   • MSTest, Nunit• Mocking   • Moq, RhinoMocks• Isolation and White box Unit Te...
Полезные ссылки• Kent Beck. Test Driven Development: By Example  http://www.amazon.com/Test-Driven-Development-  Kent-Beck...
Вопросы• Спасибо за внимание• Антон Видищев• @antonvidishchev• Anton.Vidishchev@sigmaukraine.com
Upcoming SlideShare
Loading in...5
×

Test driven development in net

840

Published on

Test-driven development in .NET by Anton Vidishchev

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
840
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
10
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • О себеОдесская группаХорошо, что происходят мероприятия
  • Содержание, что мы будем обсуждать. Не будет евангелизма, обсудим плюсы и минусы, как начать использовать TDD
  • Transcript of "Test driven development in net"

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

      Clipping is a handy way to collect important slides you want to go back to later.

    ×