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

Test driven development in net

on

  • 1,107 views

Test-driven development in .NET by Anton Vidishchev

Test-driven development in .NET by Anton Vidishchev

Statistics

Views

Total Views
1,107
Views on SlideShare
1,107
Embed Views
0

Actions

Likes
0
Downloads
8
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • О себеОдесская группаХорошо, что происходят мероприятия
  • Содержание, что мы будем обсуждать. Не будет евангелизма, обсудим плюсы и минусы, как начать использовать TDD

Test driven development in net Test driven development in net Presentation Transcript

  • Test drivendevelopmentin .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: IntegrationTests• Если возможно, используйте 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