Download - Test Driven Development in ASP.NET MVC 3
Test Driven Development
in ASP.NET MVC 3Anton Vidishchev
Team Leader at Sigma UkraineMCPD
[email protected]@antonvidishchev
Низкий контроль над разметкой Сложность тестирования
◦ Жесткая привязка к контексту◦ Page Lifecycle◦ ViewState
ASP.NET WebForms
Model
ControllerView
ASP.NET MVC
Полный контроль над разметкой SEO-friendly Широкие возможности тестирования Низкая связанность между
компонентами
ASP.NET MVC
Razor ViewEngine NuGet HTML Helpers Dependency Injection Валидация модели
Нововведения ASP.NET MVC 3
Безсессионные контроллеры Свойство ViewBag JSON Model Binding Partial Page Output Cache Global Action Filters Новые типы Action Result
Еще нововведения
Test Driven Development
Рефакторинг
Меньше времени тратится на отладку Стимулирует стройность архитектуры Повышает уверенность в написанном
коде
Преимущества TDD
Сложность тестирования БД, сервисов Ошибочный тест ведет к ошибочному
коду Тесты необходимо поддерживать
Недостатки TDD
Характеристики◦ Single responsibility◦ Малый размер◦ Изолированность
Unit test != Integration test
Что такое юнит-тест?
Fakes Mocks Stubs Dummies
Как изолировать тест от зависимостей?
Technology stack◦ ASP.NET MVC 3◦ Wcf rest services◦ Entity Framework 4.0◦ EF POCO◦ T4 Templates for Fake repository◦ SQL Azure
Мой текущий проект
NUnit Moq Resharper dotCover
Unit testing
Тестирование контроллеров◦ Создать mock HttpContextBase◦ Заполнить в контроллере ControllerContext◦ Вызвать action◦ Проверить результат
Тип результата (ViewResult, RedirectToRouteResult) Имя View Корректность модели
ASP.NET MVC Unit Testing
Setup
Test ViewResult
Test RedirectToRouteResult
Пример теста для контроллера
Тестирование routes◦ Создать mock HttpContextBase◦ Создать mock свойства context.Request.
AppRelativeCurrentExecutionFilePath◦ Вызвать GetRouteData◦ Проверить результат:
Route найден Controller Action
ASP.NET MVC Unit Testing
Пример теста
Mocks + Fakes Fakes
◦ In-memory storage, заполняется с помощью ObjectMother
◦ Помогает протестировать Linq запросы Mocks
◦ Тестируем вызовы SaveChanges()
Тестирование Data Layer
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.html
ASP.NET MVC (Installation, tutorials) http://asp.net/mvc Moq
http://code.google.com/p/moq/ Kent Beck. Test Driven Development: By Example
http://www.amazon.com/Test-Driven-Development-Kent-Beck/dp/0321146530/
Links
Вопросы и, надеюсь, ответы.
Спасибо за внимание!
Anton Vidishchev Team Leader at Sigma Ukraine
MCPD [email protected]
@antonvidishchev