Test Driven Development in ASP.NET MVC 3

Post on 24-Jan-2015

1.705 views 5 download

description

 

Transcript of Test Driven Development in ASP.NET MVC 3

Test Driven Development

in ASP.NET MVC 3Anton Vidishchev

Team Leader at Sigma UkraineMCPD

A.Vidishchev@gmail.com@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 A.Vidishchev@gmail.com

@antonvidishchev