48
UNIT TESTING Дмитрий Павлов Александр Андронов

Юнит Тестирование

Embed Size (px)

DESCRIPTION

Материалы второго дня тренинга "Refactoring. Unit Testing. TDD", который проводился 11 Декабря 2013 г. в Нижнем Новгороде

Citation preview

Page 1: Юнит Тестирование

UNIT TESTING

Дмитрий Павлов

Александр Андронов

Page 2: Юнит Тестирование

http://get.cardmone.net

Контакты

Page 3: Юнит Тестирование

Перерывы

Жест

Никаких мобил

Ноуты только на упражнениях

Парковка

Правила

Page 4: Юнит Тестирование

Проверка домашней работы

Page 5: Юнит Тестирование

1. Зачем тестировать?

2. Структура теста

3. Assert first

4. Именование (3 подхода)

5. DSL

6. Mock, Stub, Fake, Spy

7. Тесты на поведение и состояние

8. Хороший тест

9. Интеграционный тест

10. Автоматический приемочный тест

11. SpecFlow

12. Пирамида тестирования

План

Page 6: Юнит Тестирование

WHY TEST?

Зачем тестировать?

Page 7: Юнит Тестирование

FEAR

Страх

Page 8: Юнит Тестирование

THE OTHER GUY

Другой парень

Page 9: Юнит Тестирование

FEEDBACK

Обратная связь

Page 10: Юнит Тестирование

Когда интерн заявляет «Тесты для тех, кто не умеет программировать»

Польза от тестов

http://martinvalasek.com/blog/pictures-from-a-developers-life-part-2

Page 11: Юнит Тестирование

ИМЕНОВАНИЕ

Page 12: Юнит Тестирование

When<Action>

<Arrange><Assert>

WhenAuthorizeUserAdminCanLogin

HackerCanNotLogin

WhenLoadMovies

AdminCanSeeAllMovies

ChildrenMustNotNotSeeRestrictedMovies

When…

Page 13: Юнит Тестирование

<Arrange>

<Assert>

RegularMovieWith18RateIs

RestrictedForUser

AvailableForAdmin

SeriesMovieWith18RateIs

AvailableForChild

AvailableForAdmin

<Arrange>… <Assert>

Page 14: Юнит Тестирование

<Assert>

<Arrange>

RegularMovieIsAvailableFor

Admin

UserOlder14Years

NewReleaseWith18RestrictionIsNotAvailableFor

UserYounger14Years

<Assert>… <Arrange>

Page 15: Юнит Тестирование

<ClassName>Should

<Assert>

AuthenticationServiceShould

StoreLoggedInUserName

LoginPageShould

RedirectToDefaultPage

DefaultPageShould

ShowSalesReportToAdmin

<ClassName> Should

Page 16: Юнит Тестирование

<ClassName>Tests

<Act>_<Arrange>_<Assert>

DefaultPageTests

LoadMovies_Admin_ShowAll

LoadMovies_UserElder18_ShowAll

LoadMovies_UserYonger18_ShowNewReleases

<Act>_<Arrange>_<Assert>

Page 17: Юнит Тестирование

Упражнение. Переименуйте тесты

Page 18: Юнит Тестирование

СТРУКТУРА ТЕСТА

Page 19: Юнит Тестирование

Arrange Act Assert

Page 20: Юнит Тестирование

Упражнение. Структурируйте тесты AAA

Page 21: Юнит Тестирование

DSL

Page 22: Юнит Тестирование

Игра «Жизнь»

Page 23: Юнит Тестирование

Тест, который трудно понять

Page 24: Юнит Тестирование

Тест, который легко понять

Page 25: Юнит Тестирование

Так пишите так!

Page 26: Юнит Тестирование

Упражнение. Придумайте DSLиз разных доменов

Page 27: Юнит Тестирование

STUB, FAKE, SPY, MOCK

Page 28: Юнит Тестирование

Session

Response.Redirect

XML файл

Упражнение. Fake It

Page 29: Юнит Тестирование

Отправить отчет по email

Упражнение. Новое требование

Page 30: Юнит Тестирование

ТЕСТЫ НА ПОВЕДЕНИЕ И СОСТОЯНИЕ

Page 31: Юнит Тестирование

Тест на поведение

Page 32: Юнит Тестирование

Перетащить StatementFormatter

Отправить отформатированный отчет по email

Написать тест на поведение

Написать тест на состояние

Упражнение. Тест на поведение и на состояние

Page 33: Юнит Тестирование

ХОРОШИЙ ТЕСТ

Page 34: Юнит Тестирование
Page 35: Юнит Тестирование

МУТНЫЕ ТЕСТЫ

Page 36: Юнит Тестирование

Мутные тесты

Page 37: Юнит Тестирование

Запахи тестов

Assert.AreEqual(1, collection.Count)

StringAssert.Contains

CollectionAssert.Contains

Assert.WasCalled

Много сломанных тестов после рефакторинга

Медленные тесты

Page 38: Юнит Тестирование

ИНТЕГРАЦИОННЫЙ ТЕСТ

Page 39: Юнит Тестирование

Интеграционные тесты

Page 40: Юнит Тестирование

АВТОМАТИЧЕСКИЙ ПРИЕМОЧНЫЙ ТЕСТ

Page 41: Юнит Тестирование

SpecFlow

Page 42: Юнит Тестирование

ПИРАМИДА ТЕСТИРОВАНИЯ

Page 43: Юнит Тестирование

Зачем тестировать?

Структура теста

Именование

DSL

Stub, Fake, Spy, Mock

Тесты на поведение и состояние

Хороший тест

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

Чему мы научились

Page 44: Юнит Тестирование

Придумать DSL для вашего проекта

Домашнее задание

Page 45: Юнит Тестирование

Книги

Page 46: Юнит Тестирование

Roy Osherove “The art of unit testing” http://artofunittesting.com/

Ссылки

Page 47: Юнит Тестирование

Вопросы?

Page 48: Юнит Тестирование

http://get.cardmone.net

Контакты