SlideShare a Scribd company logo
1 of 22
   Пару слов про TDD
   Рекомендации по написанию тестов
   Что такое моки
   Когда и каким образом использовать моки
   Пример тестов с использованием
    фреймворков
     NUnit + NBehave
     Moq
     TestDox
Разработка через тестирование (test-driven
development, TDD) — техника разработки
программного обеспечения, которая основывается
на повторении очень коротких циклов разработки:

1. сначала пишется тест, покрывающий желаемое
   изменение
2. затем пишется код, который позволит пройти
   тест
3. и под конец проводится рефакторинг нового
   кода к соответствующим стандартам.
   Тест должен «говорить» какой сценарий
    он проверяет

   Наименование теста пишется в нотации
    pascal-case

Пример:
 Message_Should_Be_Deleted_After_Send
   Один тест проверяет один короткий
    сценарий работы класса/набора
    взаимодействующих классов

   В одном тесте содержится только одна
    проверка assert
Моки – это автоматически генерируемые
заглушки для интерфейсов и классов.

Моки позволяют моделировать поведение
объекта:
  Результаты работы методов
  Генерацию событий, обратный вызов
   методов
  Обращение к методам и свойствам класса
   Изоляция тестируемого кода – имитация
    БД.

   Имитация ненаписанного кода.

   Тестирование делегирования – проверка
    последовательности вызовов между
    классами.
   Возврат определенных значений метода
    объекта.

   Генерацию событий объекта.

   Верификацию количества вызовов
    методов.
Виды unit-
         тестов



  Тесты            Тесты
состояния     взаимодействия
   Генератор отчетов умеет создавать отчет
    на выбранную дату
   Отчеты могут быть созданы как за текущие
    сутки, так и за прошлые
   Формирование отчетов за будущее
    недоступно
   Отчеты сформированный в нечетные дни
    должны отправляться по почте
   Быстрый старт по библиотеке Moq –
    http://code.google.com/p/moq/wiki/QuickStart
   Александр Бындю «TDD для начинающих»
    – http://vimeo.com/9541997
   Андрей Бибичев «Быстрое введение в TDD
    от А до Я» – http://www.slideshare.net/biBIGine/fast-intro-into-tdd
   Написание unit-тестов
     Рекомендации по оформлению тестов
     Тестирование генерации исключений, событий
   Использование фреймворка Moq
     Имитация работы объекта в зависимости от
      параметра
     Верификация вызовов
   Трёшников Павел
     Ведущий разработчик СМС-ИТ
        ▪ www.sms-automation.ru

     e-mail: treshnikov@gmail.com
     twitter: @treshnikov

More Related Content

What's hot

Фофанов Илья - Лучшие практики проектирования и реализации API на C#
Фофанов Илья - Лучшие практики проектирования и реализации API на C#Фофанов Илья - Лучшие практики проектирования и реализации API на C#
Фофанов Илья - Лучшие практики проектирования и реализации API на C#
Elias Fofanov
 
серёжа пономарёв @ Kuchyn.com.ua junior java developer программируем по-взро...
серёжа пономарёв @ Kuchyn.com.ua junior java developer  программируем по-взро...серёжа пономарёв @ Kuchyn.com.ua junior java developer  программируем по-взро...
серёжа пономарёв @ Kuchyn.com.ua junior java developer программируем по-взро...
Sergey Ponomarev
 
Двухкратный публичный code review, Евгения Фирсова (Яндекс)
Двухкратный публичный code review, Евгения Фирсова (Яндекс)Двухкратный публичный code review, Евгения Фирсова (Яндекс)
Двухкратный публичный code review, Евгения Фирсова (Яндекс)
Ontico
 
Sqadays 8-barancev
Sqadays 8-barancevSqadays 8-barancev
Sqadays 8-barancev
Alexei Lupan
 
Тестирование осень 2013 лекция 3
Тестирование осень 2013 лекция 3Тестирование осень 2013 лекция 3
Тестирование осень 2013 лекция 3
Technopark
 

What's hot (20)

Rambler.iOS #3: Test-Driven Development в iOS
Rambler.iOS #3: Test-Driven Development в iOSRambler.iOS #3: Test-Driven Development в iOS
Rambler.iOS #3: Test-Driven Development в iOS
 
Фофанов Илья - Лучшие практики проектирования и реализации API на C#
Фофанов Илья - Лучшие практики проектирования и реализации API на C#Фофанов Илья - Лучшие практики проектирования и реализации API на C#
Фофанов Илья - Лучшие практики проектирования и реализации API на C#
 
Сергей Кащенко - Опыт внедрения метрик
Сергей Кащенко - Опыт внедрения метрикСергей Кащенко - Опыт внедрения метрик
Сергей Кащенко - Опыт внедрения метрик
 
серёжа пономарёв @ Kuchyn.com.ua junior java developer программируем по-взро...
серёжа пономарёв @ Kuchyn.com.ua junior java developer  программируем по-взро...серёжа пономарёв @ Kuchyn.com.ua junior java developer  программируем по-взро...
серёжа пономарёв @ Kuchyn.com.ua junior java developer программируем по-взро...
 
Инструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаИнструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщика
 
Практическое применение принципа инверсии зависимостей на примере Ruby
Практическое применение принципа инверсии зависимостей на примере RubyПрактическое применение принципа инверсии зависимостей на примере Ruby
Практическое применение принципа инверсии зависимостей на примере Ruby
 
Двухкратный публичный code review, Евгения Фирсова (Яндекс)
Двухкратный публичный code review, Евгения Фирсова (Яндекс)Двухкратный публичный code review, Евгения Фирсова (Яндекс)
Двухкратный публичный code review, Евгения Фирсова (Яндекс)
 
КГТУ Лекция 6: Обеспечение Качества Программного Обеспечения
КГТУ Лекция 6: Обеспечение Качества Программного Обеспечения КГТУ Лекция 6: Обеспечение Качества Программного Обеспечения
КГТУ Лекция 6: Обеспечение Качества Программного Обеспечения
 
Организация процесса ручного тестирования
Организация процесса ручного тестированияОрганизация процесса ручного тестирования
Организация процесса ручного тестирования
 
Невыносимая переносимость кроссплатформенных приложений на примере десктопных...
Невыносимая переносимость кроссплатформенных приложений на примере десктопных...Невыносимая переносимость кроссплатформенных приложений на примере десктопных...
Невыносимая переносимость кроссплатформенных приложений на примере десктопных...
 
Sqadays 8-barancev
Sqadays 8-barancevSqadays 8-barancev
Sqadays 8-barancev
 
Unit Testing
Unit TestingUnit Testing
Unit Testing
 
Выбор и тестирование Ngfw. Опыт Rambler
Выбор и тестирование Ngfw. Опыт RamblerВыбор и тестирование Ngfw. Опыт Rambler
Выбор и тестирование Ngfw. Опыт Rambler
 
QA Лекция2
QA Лекция2QA Лекция2
QA Лекция2
 
лекция4 qa
лекция4 qaлекция4 qa
лекция4 qa
 
Тестирование осень 2013 лекция 3
Тестирование осень 2013 лекция 3Тестирование осень 2013 лекция 3
Тестирование осень 2013 лекция 3
 
лекция3 QA
лекция3 QAлекция3 QA
лекция3 QA
 
ClubQA #2. Unit testing and TDD
ClubQA #2. Unit testing and TDDClubQA #2. Unit testing and TDD
ClubQA #2. Unit testing and TDD
 
Нагрузочное тестирование: Нестандартные методы анализа потока данных в прилож...
Нагрузочное тестирование: Нестандартные методы анализа потока данных в прилож...Нагрузочное тестирование: Нестандартные методы анализа потока данных в прилож...
Нагрузочное тестирование: Нестандартные методы анализа потока данных в прилож...
 
TMPA-2013 Itsykson: Java Program Analysis
TMPA-2013 Itsykson: Java Program AnalysisTMPA-2013 Itsykson: Java Program Analysis
TMPA-2013 Itsykson: Java Program Analysis
 

Viewers also liked

Использование Mock объектов в модульном тестировании
Использование Mock объектов в модульном тестированииИспользование Mock объектов в модульном тестировании
Использование Mock объектов в модульном тестировании
GetDev.NET
 

Viewers also liked (13)

Использование Mock объектов в модульном тестировании
Использование Mock объектов в модульном тестированииИспользование Mock объектов в модульном тестировании
Использование Mock объектов в модульном тестировании
 
Быстрое введение в TDD от А до Я
Быстрое введение в TDD от А до ЯБыстрое введение в TDD от А до Я
Быстрое введение в TDD от А до Я
 
Коротко о Scrum
Коротко о ScrumКоротко о Scrum
Коротко о Scrum
 
SOLID – принципы объектно-ориентированного дизайна
SOLID – принципы объектно-ориентированного дизайнаSOLID – принципы объектно-ориентированного дизайна
SOLID – принципы объектно-ориентированного дизайна
 
Разработка приложений работы с данными при помощи WPF
Разработка приложений работы с данными при помощи WPFРазработка приложений работы с данными при помощи WPF
Разработка приложений работы с данными при помощи WPF
 
Working with .NET Threads
Working with .NET ThreadsWorking with .NET Threads
Working with .NET Threads
 
ПАК Мониторинг - краткое описание системы
ПАК Мониторинг - краткое описание системыПАК Мониторинг - краткое описание системы
ПАК Мониторинг - краткое описание системы
 
Системы контроля версий
Системы контроля версийСистемы контроля версий
Системы контроля версий
 
Расчет и документирование технологических процессов на базе WinCC OA
Расчет и документирование технологических процессов на базе WinCC OAРасчет и документирование технологических процессов на базе WinCC OA
Расчет и документирование технологических процессов на базе WinCC OA
 
WinCC OA
WinCC OAWinCC OA
WinCC OA
 
Архитектура масштабируемых приложений. Микросервисы, CQRS, ESB
Архитектура масштабируемых приложений. Микросервисы, CQRS, ESBАрхитектура масштабируемых приложений. Микросервисы, CQRS, ESB
Архитектура масштабируемых приложений. Микросервисы, CQRS, ESB
 
Процессы, практики, инструменты разработки программного обеспечения
Процессы, практики, инструменты разработки программного обеспеченияПроцессы, практики, инструменты разработки программного обеспечения
Процессы, практики, инструменты разработки программного обеспечения
 
Siemens oil and gas 2016 WinCC OA
Siemens oil and gas 2016   WinCC OASiemens oil and gas 2016   WinCC OA
Siemens oil and gas 2016 WinCC OA
 

Similar to Использование Mock-объектов в TDD на платформе .NET

Повышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документацииПовышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документации
CEE-SEC(R)
 
Test Driven Development in .NET Applications
Test Driven Development in .NET ApplicationsTest Driven Development in .NET Applications
Test Driven Development in .NET Applications
Anton Vidishchev
 
XP.Party (iOS) - testable code & architecture
XP.Party (iOS) - testable code & architectureXP.Party (iOS) - testable code & architecture
XP.Party (iOS) - testable code & architecture
Anton Katkov
 
Тестирование крупного проекта командой из одного тестировщика
Тестирование крупного проекта командой из одного тестировщикаТестирование крупного проекта командой из одного тестировщика
Тестирование крупного проекта командой из одного тестировщика
Zestranec
 
Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...
Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...
Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...
Mail.ru Group
 
Test Driven Development in ASP.NET MVC 3
Test Driven Development in ASP.NET MVC 3Test Driven Development in ASP.NET MVC 3
Test Driven Development in ASP.NET MVC 3
Anton Vidishchev
 
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙСтановление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ
CEE-SEC(R)
 

Similar to Использование Mock-объектов в TDD на платформе .NET (20)

Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва
 Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва  Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва
Как сейчас тесты в Android пишут, Денис Неклюдов, Google Dev Expert, Москва
 
Модульное тестирование и TDD в .NET
Модульное тестирование и TDD в .NETМодульное тестирование и TDD в .NET
Модульное тестирование и TDD в .NET
 
Никита Галкин "Testing in Node.js World"
Никита Галкин "Testing in Node.js World"Никита Галкин "Testing in Node.js World"
Никита Галкин "Testing in Node.js World"
 
DevOps guide for awesome quality assurance
DevOps guide for awesome quality assuranceDevOps guide for awesome quality assurance
DevOps guide for awesome quality assurance
 
QA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
QA Fes 2016. Анастасия Асеева. Роль тестирования в DevopsQA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
QA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
 
QAFest. Роль тестирования в Devops
QAFest. Роль тестирования в DevopsQAFest. Роль тестирования в Devops
QAFest. Роль тестирования в Devops
 
Unit testing and TDD
Unit testing and TDDUnit testing and TDD
Unit testing and TDD
 
Повышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документацииПовышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документации
 
Test driven development in net
Test driven development in netTest driven development in net
Test driven development in net
 
Test Driven Development in .NET Applications
Test Driven Development in .NET ApplicationsTest Driven Development in .NET Applications
Test Driven Development in .NET Applications
 
Testing RIA with Selenium
Testing RIA with SeleniumTesting RIA with Selenium
Testing RIA with Selenium
 
XP.Party (iOS) - testable code & architecture
XP.Party (iOS) - testable code & architectureXP.Party (iOS) - testable code & architecture
XP.Party (iOS) - testable code & architecture
 
Создаем масштабируемое корпоративное JavaScript-приложение, Влад Плотник
Создаем масштабируемое корпоративное JavaScript-приложение, Влад ПлотникСоздаем масштабируемое корпоративное JavaScript-приложение, Влад Плотник
Создаем масштабируемое корпоративное JavaScript-приложение, Влад Плотник
 
Java mocking frameworks: Mockito and PowerMock
Java mocking frameworks: Mockito and PowerMockJava mocking frameworks: Mockito and PowerMock
Java mocking frameworks: Mockito and PowerMock
 
Тестирование крупного проекта командой из одного тестировщика
Тестирование крупного проекта командой из одного тестировщикаТестирование крупного проекта командой из одного тестировщика
Тестирование крупного проекта командой из одного тестировщика
 
Тестирование крупных проектов командой из одного тестировщика
Тестирование крупных проектов командой из одного тестировщика Тестирование крупных проектов командой из одного тестировщика
Тестирование крупных проектов командой из одного тестировщика
 
Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...
Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...
Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...
 
Test Driven Development in ASP.NET MVC 3
Test Driven Development in ASP.NET MVC 3Test Driven Development in ASP.NET MVC 3
Test Driven Development in ASP.NET MVC 3
 
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙСтановление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ
 
MockServer-driven development
MockServer-driven developmentMockServer-driven development
MockServer-driven development
 

Использование Mock-объектов в TDD на платформе .NET

  • 1.
  • 2. Пару слов про TDD  Рекомендации по написанию тестов  Что такое моки  Когда и каким образом использовать моки  Пример тестов с использованием фреймворков  NUnit + NBehave  Moq  TestDox
  • 3.
  • 4. Разработка через тестирование (test-driven development, TDD) — техника разработки программного обеспечения, которая основывается на повторении очень коротких циклов разработки: 1. сначала пишется тест, покрывающий желаемое изменение 2. затем пишется код, который позволит пройти тест 3. и под конец проводится рефакторинг нового кода к соответствующим стандартам.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9. Тест должен «говорить» какой сценарий он проверяет  Наименование теста пишется в нотации pascal-case Пример:  Message_Should_Be_Deleted_After_Send
  • 10. Один тест проверяет один короткий сценарий работы класса/набора взаимодействующих классов  В одном тесте содержится только одна проверка assert
  • 11.
  • 12.
  • 13.
  • 14. Моки – это автоматически генерируемые заглушки для интерфейсов и классов. Моки позволяют моделировать поведение объекта:  Результаты работы методов  Генерацию событий, обратный вызов методов  Обращение к методам и свойствам класса
  • 15. Изоляция тестируемого кода – имитация БД.  Имитация ненаписанного кода.  Тестирование делегирования – проверка последовательности вызовов между классами.
  • 16. Возврат определенных значений метода объекта.  Генерацию событий объекта.  Верификацию количества вызовов методов.
  • 17. Виды unit- тестов Тесты Тесты состояния взаимодействия
  • 18.
  • 19. Генератор отчетов умеет создавать отчет на выбранную дату  Отчеты могут быть созданы как за текущие сутки, так и за прошлые  Формирование отчетов за будущее недоступно  Отчеты сформированный в нечетные дни должны отправляться по почте
  • 20. Быстрый старт по библиотеке Moq – http://code.google.com/p/moq/wiki/QuickStart  Александр Бындю «TDD для начинающих» – http://vimeo.com/9541997  Андрей Бибичев «Быстрое введение в TDD от А до Я» – http://www.slideshare.net/biBIGine/fast-intro-into-tdd
  • 21. Написание unit-тестов  Рекомендации по оформлению тестов  Тестирование генерации исключений, событий  Использование фреймворка Moq  Имитация работы объекта в зависимости от параметра  Верификация вызовов
  • 22. Трёшников Павел  Ведущий разработчик СМС-ИТ ▪ www.sms-automation.ru  e-mail: treshnikov@gmail.com  twitter: @treshnikov