• Like
Test driven development in net
Upcoming SlideShare
Loading in...5
×

Test driven development in net

  • 760 views
Uploaded on

Test-driven development in .NET by Anton Vidishchev

Test-driven development in .NET by Anton Vidishchev

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
760
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
9
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

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

Transcript

  • 1. Test drivendevelopmentin .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. Мантра ТDD
  • 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: IntegrationTests• Если возможно, используйте 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• Anton.Vidishchev@sigmaukraine.com