tdd: arrange act assert на примере rhino mocks

42
TDD: Arrange Act Assert на примере Rhino Mocks СЕРГЕЙ КАЛИНЕЦ http://tdd4.net

Upload: serhiy-kalinets

Post on 21-Jun-2015

875 views

Category:

Technology


0 download

DESCRIPTION

Доклад с конференции Agile Base Camp 2011 (Киев, 16 апреля)

TRANSCRIPT

Page 1: TDD: Arrange Act Assert на примере Rhino Mocks

TDD: Arrange Act Assert на примере Rhino Mocks

СЕРГЕЙ КАЛИНЕЦ

http://tdd4.net

Page 2: TDD: Arrange Act Assert на примере Rhino Mocks

Немного обо мне

Сергей Калинец

Болен программированием с детства

Сейчас пишет под .Net

Фанат TDD (tdd4.net)

TDD: Arrange Act Assert на примере Rhino Mocks 2

Page 3: TDD: Arrange Act Assert на примере Rhino Mocks

План доклада

Arrange Act Assert

Rhino Mocks

AAA + Rhino Mocks

TDD: Arrange Act Assert на примере Rhino Mocks 3

Page 4: TDD: Arrange Act Assert на примере Rhino Mocks

Почему TDD туго идет

Неверно понимаются принципы

Сложно сменить стиль работы

Непонятно, как писать тесты

4TDD: Arrange Act Assert на примере Rhino Mocks :: Сергей Калинец

Page 5: TDD: Arrange Act Assert на примере Rhino Mocks

Организация теста: AAA

TDD: Arrange Act Assert на примере Rhino Mocks 5

Page 6: TDD: Arrange Act Assert на примере Rhino Mocks

Зачем нужен ААА?

Для чистоты…

 

TDD: Arrange Act Assert на примере Rhino Mocks 6

Page 7: TDD: Arrange Act Assert на примере Rhino Mocks

Зачем нужен ААА?

Для чистоты…

КОДА

TDD: Arrange Act Assert на примере Rhino Mocks 7

Page 8: TDD: Arrange Act Assert на примере Rhino Mocks

Чистый код

Его легко читать

 

 

TDD: Arrange Act Assert на примере Rhino Mocks 8

Page 9: TDD: Arrange Act Assert на примере Rhino Mocks

Чистый код

Его легко читать

В нем нет запахов (smells)

(не G-Код)

TDD: Arrange Act Assert на примере Rhino Mocks 9

Page 10: TDD: Arrange Act Assert на примере Rhino Mocks

AAA: пример (простой)

TDD: Arrange Act Assert на примере Rhino Mocks 10

Page 11: TDD: Arrange Act Assert на примере Rhino Mocks

Тестирование зависимостей

Классы часто взаимодействуют с другими классами

TDD: Arrange Act Assert на примере Rhino Mocks 11

Page 12: TDD: Arrange Act Assert на примере Rhino Mocks

Тестирование зависимостей

Классы часто взаимодействуют с другими классами

TDD: Arrange Act Assert на примере Rhino Mocks 12

Page 13: TDD: Arrange Act Assert на примере Rhino Mocks

Реальные объекты – просто…

 

 

 

TDD: Arrange Act Assert на примере Rhino Mocks 13

Page 14: TDD: Arrange Act Assert на примере Rhino Mocks

Реальные объекты – просто…

ОДНАКО

Тесты перестают быть модульными (юнит)

Реальные объекты не всегда доступны

Где брать эталонные данные?

TDD: Arrange Act Assert на примере Rhino Mocks 14

Page 15: TDD: Arrange Act Assert на примере Rhino Mocks

Нереальные объекты (дублёры)

TDD: Arrange Act Assert на примере Rhino Mocks 15

Page 16: TDD: Arrange Act Assert на примере Rhino Mocks

Rhino Mocks

Cоздает стабы и моки на лету

Fluent interface, лямбды, простой рефакторинг

Несколько синтаксисов, очень универсальный

TDD: Arrange Act Assert на примере Rhino Mocks 16

Page 17: TDD: Arrange Act Assert на примере Rhino Mocks

Rhino Mocks: основы

TDD: Arrange Act Assert на примере Rhino Mocks 17

Page 18: TDD: Arrange Act Assert на примере Rhino Mocks

Синтаксис 1

TDD: Arrange Act Assert на примере Rhino Mocks 18

Page 19: TDD: Arrange Act Assert на примере Rhino Mocks

Синтаксис 2

TDD: Arrange Act Assert на примере Rhino Mocks 19

Page 20: TDD: Arrange Act Assert на примере Rhino Mocks

Что тестируем?

TDD: Arrange Act Assert на примере Rhino Mocks 20

Page 21: TDD: Arrange Act Assert на примере Rhino Mocks

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

Проверяем, что метод вызвался

С правильными параметрами

Нужное количество раз

Вернул ожидаемый результат или бахнул с ошибкой

TDD: Arrange Act Assert на примере Rhino Mocks 21

Page 22: TDD: Arrange Act Assert на примере Rhino Mocks

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

Проверяем, что тестируемый объект находится в ожидаемом состоянии

TDD: Arrange Act Assert на примере Rhino Mocks 22

Page 23: TDD: Arrange Act Assert на примере Rhino Mocks

Два в одном

TDD: Arrange Act Assert на примере Rhino Mocks 23

Page 24: TDD: Arrange Act Assert на примере Rhino Mocks

Проблемы

Более одного Assert = G-Код

• >1 причины, почему может упасть тест

• Спасет только отладчик

Тестирование поведения часто избыточное

• «Сеть безопасности» начинает быть тесной

• Ухудшается изоляция тестов

TDD: Arrange Act Assert на примере Rhino Mocks 24

Page 25: TDD: Arrange Act Assert на примере Rhino Mocks

Проблемы

Более одного Assert = G-Код

• >1 причины, почему может упасть тест

• Спасет только отладчик

Тестирование поведения часто избыточное

• «Сеть безопасности» начинает быть тесной

• Ухудшается изоляция тестов

TDD: Arrange Act Assert на примере Rhino Mocks 25

Page 26: TDD: Arrange Act Assert на примере Rhino Mocks

Убираем (ослабляем) тестирование поведения

TDD: Arrange Act Assert на примере Rhino Mocks 26

Page 27: TDD: Arrange Act Assert на примере Rhino Mocks

Синтаксис 3

TDD: Arrange Act Assert на примере Rhino Mocks 27

Page 28: TDD: Arrange Act Assert на примере Rhino Mocks

Синтаксис 3

TDD: Arrange Act Assert на примере Rhino Mocks 28

ArrangeAct

Assert

Page 29: TDD: Arrange Act Assert на примере Rhino Mocks

А оно точно работает?

Вдруг нужные данные получены не из двойника?

TDD: Arrange Act Assert на примере Rhino Mocks 29

Page 30: TDD: Arrange Act Assert на примере Rhino Mocks

А оно точно работает?

Вдруг нужные данные получены не из двойника?

TDD: Arrange Act Assert на примере Rhino Mocks 30

Page 31: TDD: Arrange Act Assert на примере Rhino Mocks

А оно точно работает?

Вдруг нужные данные получены не из двойника?

TDD: Arrange Act Assert на примере Rhino Mocks 31

Page 32: TDD: Arrange Act Assert на примере Rhino Mocks

А оно точно работает?

Вдруг нужные данные получены не из двойника?

TDD: Arrange Act Assert на примере Rhino Mocks 32

Page 33: TDD: Arrange Act Assert на примере Rhino Mocks

А оно точно работает?

Вдруг нужные данные получены не из двойника?

TDD: Arrange Act Assert на примере Rhino Mocks 33

Page 34: TDD: Arrange Act Assert на примере Rhino Mocks

А оно точно работает?

Вдруг нужные данные получены не из двойника?

TDD: Arrange Act Assert на примере Rhino Mocks 34

Page 35: TDD: Arrange Act Assert на примере Rhino Mocks

А оно точно работает?

Вдруг нужные данные получены не из двойника?

TDD: Arrange Act Assert на примере Rhino Mocks 35

Page 36: TDD: Arrange Act Assert на примере Rhino Mocks

Иногда все же нужно

Методы без результатов

TDD: Arrange Act Assert на примере Rhino Mocks 36

Page 37: TDD: Arrange Act Assert на примере Rhino Mocks

Иногда все же нужно

Методы без результатов

TDD: Arrange Act Assert на примере Rhino Mocks 37

Page 38: TDD: Arrange Act Assert на примере Rhino Mocks

Иногда все же нужно

Методы без результатов

TDD: Arrange Act Assert на примере Rhino Mocks 38

Page 39: TDD: Arrange Act Assert на примере Rhino Mocks

Неоправданная сложность

TDD: Arrange Act Assert на примере Rhino Mocks 39

Page 40: TDD: Arrange Act Assert на примере Rhino Mocks

Неоправданная сложность

TDD: Arrange Act Assert на примере Rhino Mocks 40

Page 41: TDD: Arrange Act Assert на примере Rhino Mocks

Сухой остаток

Clean Code и AAA – это хорошо

Rhino Mock – отличный инструмент

Лучше тестировать состояние

Случайные значения в тестах рулят!

TDD: Arrange Act Assert на примере Rhino Mocks 41

Page 42: TDD: Arrange Act Assert на примере Rhino Mocks

СПАСИБО!

СЕРГЕЙ КАЛИНЕЦ http://tdd4.net

EMAIL: [email protected]

SKYPE: sergiikalinets

TWITTER: @skalinets

42TDD: Arrange Act Assert на примере Rhino Mocks