Test Driven Development in ASP.NET MVC 3

21
Test Driven Development in ASP.NET MVC 3 Anton Vidishchev Team Leader at Sigma Ukraine MCPD [email protected] @antonvidishchev

description

 

Transcript of Test Driven Development in ASP.NET MVC 3

Page 1: 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 2: Test Driven Development in ASP.NET MVC 3

Низкий контроль над разметкой Сложность тестирования

◦ Жесткая привязка к контексту◦ Page Lifecycle◦ ViewState

ASP.NET WebForms

Page 3: Test Driven Development in ASP.NET MVC 3

Model

ControllerView

ASP.NET MVC

Page 4: Test Driven Development in ASP.NET MVC 3

Полный контроль над разметкой SEO-friendly Широкие возможности тестирования Низкая связанность между

компонентами

ASP.NET MVC

Page 5: Test Driven Development in ASP.NET MVC 3

Razor ViewEngine NuGet HTML Helpers Dependency Injection Валидация модели

Нововведения ASP.NET MVC 3

Page 6: Test Driven Development in ASP.NET MVC 3

Безсессионные контроллеры Свойство ViewBag JSON Model Binding Partial Page Output Cache Global Action Filters Новые типы Action Result

Еще нововведения

Page 7: Test Driven Development in ASP.NET MVC 3

Test Driven Development

Page 8: Test Driven Development in ASP.NET MVC 3

Рефакторинг

Page 9: Test Driven Development in ASP.NET MVC 3

Меньше времени тратится на отладку Стимулирует стройность архитектуры Повышает уверенность в написанном

коде

Преимущества TDD

Page 10: Test Driven Development in ASP.NET MVC 3

Сложность тестирования БД, сервисов Ошибочный тест ведет к ошибочному

коду Тесты необходимо поддерживать

Недостатки TDD

Page 11: Test Driven Development in ASP.NET MVC 3

Характеристики◦ Single responsibility◦ Малый размер◦ Изолированность

Unit test != Integration test

Что такое юнит-тест?

Page 12: Test Driven Development in ASP.NET MVC 3

Fakes Mocks Stubs Dummies

Как изолировать тест от зависимостей?

Page 13: Test Driven Development in ASP.NET MVC 3

Technology stack◦ ASP.NET MVC 3◦ Wcf rest services◦ Entity Framework 4.0◦ EF POCO◦ T4 Templates for Fake repository◦ SQL Azure

Мой текущий проект

Page 14: Test Driven Development in ASP.NET MVC 3

NUnit Moq Resharper dotCover

Unit testing

Page 15: Test Driven Development in ASP.NET MVC 3

Тестирование контроллеров◦ Создать mock HttpContextBase◦ Заполнить в контроллере ControllerContext◦ Вызвать action◦ Проверить результат

Тип результата (ViewResult, RedirectToRouteResult) Имя View Корректность модели

ASP.NET MVC Unit Testing

Page 16: Test Driven Development in ASP.NET MVC 3

Setup

Test ViewResult

Test RedirectToRouteResult

Пример теста для контроллера

Page 17: Test Driven Development in ASP.NET MVC 3

Тестирование routes◦ Создать mock HttpContextBase◦ Создать mock свойства context.Request.

AppRelativeCurrentExecutionFilePath◦ Вызвать GetRouteData◦ Проверить результат:

Route найден Controller Action

ASP.NET MVC Unit Testing

Page 18: Test Driven Development in ASP.NET MVC 3

Пример теста

Page 19: Test Driven Development in ASP.NET MVC 3

Mocks + Fakes Fakes

◦ In-memory storage, заполняется с помощью ObjectMother

◦ Помогает протестировать Linq запросы Mocks

◦ Тестируем вызовы SaveChanges()

Тестирование Data Layer

Page 20: Test Driven Development in ASP.NET MVC 3

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

Page 21: Test Driven Development in ASP.NET MVC 3

Вопросы и, надеюсь, ответы.

Спасибо за внимание!

Anton Vidishchev Team Leader at Sigma Ukraine

MCPD [email protected]

@antonvidishchev