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
• Anton.Vidishchev@sigmaukraine.com
Notas do Editor
О себеОдесская группаХорошо, что происходят мероприятия
Содержание, что мы будем обсуждать. Не будет евангелизма, обсудим плюсы и минусы, как начать использовать TDD