tdd: arrange act assert на примере rhino mocks
DESCRIPTION
Доклад с конференции Agile Base Camp 2011 (Киев, 16 апреля)TRANSCRIPT
TDD: Arrange Act Assert на примере Rhino Mocks
СЕРГЕЙ КАЛИНЕЦ
http://tdd4.net
Немного обо мне
Сергей Калинец
Болен программированием с детства
Сейчас пишет под .Net
Фанат TDD (tdd4.net)
TDD: Arrange Act Assert на примере Rhino Mocks 2
План доклада
Arrange Act Assert
Rhino Mocks
AAA + Rhino Mocks
TDD: Arrange Act Assert на примере Rhino Mocks 3
Почему TDD туго идет
Неверно понимаются принципы
Сложно сменить стиль работы
Непонятно, как писать тесты
4TDD: Arrange Act Assert на примере Rhino Mocks :: Сергей Калинец
Организация теста: AAA
TDD: Arrange Act Assert на примере Rhino Mocks 5
Зачем нужен ААА?
Для чистоты…
TDD: Arrange Act Assert на примере Rhino Mocks 6
Зачем нужен ААА?
Для чистоты…
КОДА
TDD: Arrange Act Assert на примере Rhino Mocks 7
Чистый код
Его легко читать
TDD: Arrange Act Assert на примере Rhino Mocks 8
Чистый код
Его легко читать
В нем нет запахов (smells)
(не G-Код)
TDD: Arrange Act Assert на примере Rhino Mocks 9
AAA: пример (простой)
TDD: Arrange Act Assert на примере Rhino Mocks 10
Тестирование зависимостей
Классы часто взаимодействуют с другими классами
TDD: Arrange Act Assert на примере Rhino Mocks 11
Тестирование зависимостей
Классы часто взаимодействуют с другими классами
TDD: Arrange Act Assert на примере Rhino Mocks 12
Реальные объекты – просто…
TDD: Arrange Act Assert на примере Rhino Mocks 13
Реальные объекты – просто…
ОДНАКО
Тесты перестают быть модульными (юнит)
Реальные объекты не всегда доступны
Где брать эталонные данные?
TDD: Arrange Act Assert на примере Rhino Mocks 14
Нереальные объекты (дублёры)
TDD: Arrange Act Assert на примере Rhino Mocks 15
Rhino Mocks
Cоздает стабы и моки на лету
Fluent interface, лямбды, простой рефакторинг
Несколько синтаксисов, очень универсальный
TDD: Arrange Act Assert на примере Rhino Mocks 16
Rhino Mocks: основы
TDD: Arrange Act Assert на примере Rhino Mocks 17
Синтаксис 1
TDD: Arrange Act Assert на примере Rhino Mocks 18
Синтаксис 2
TDD: Arrange Act Assert на примере Rhino Mocks 19
Что тестируем?
TDD: Arrange Act Assert на примере Rhino Mocks 20
Тестирование поведения
Проверяем, что метод вызвался
С правильными параметрами
Нужное количество раз
Вернул ожидаемый результат или бахнул с ошибкой
TDD: Arrange Act Assert на примере Rhino Mocks 21
Тестирование состояния
Проверяем, что тестируемый объект находится в ожидаемом состоянии
TDD: Arrange Act Assert на примере Rhino Mocks 22
Два в одном
TDD: Arrange Act Assert на примере Rhino Mocks 23
Проблемы
Более одного Assert = G-Код
• >1 причины, почему может упасть тест
• Спасет только отладчик
Тестирование поведения часто избыточное
• «Сеть безопасности» начинает быть тесной
• Ухудшается изоляция тестов
TDD: Arrange Act Assert на примере Rhino Mocks 24
Проблемы
Более одного Assert = G-Код
• >1 причины, почему может упасть тест
• Спасет только отладчик
Тестирование поведения часто избыточное
• «Сеть безопасности» начинает быть тесной
• Ухудшается изоляция тестов
TDD: Arrange Act Assert на примере Rhino Mocks 25
Убираем (ослабляем) тестирование поведения
TDD: Arrange Act Assert на примере Rhino Mocks 26
Синтаксис 3
TDD: Arrange Act Assert на примере Rhino Mocks 27
Синтаксис 3
TDD: Arrange Act Assert на примере Rhino Mocks 28
ArrangeAct
Assert
А оно точно работает?
Вдруг нужные данные получены не из двойника?
TDD: Arrange Act Assert на примере Rhino Mocks 29
А оно точно работает?
Вдруг нужные данные получены не из двойника?
TDD: Arrange Act Assert на примере Rhino Mocks 30
А оно точно работает?
Вдруг нужные данные получены не из двойника?
TDD: Arrange Act Assert на примере Rhino Mocks 31
А оно точно работает?
Вдруг нужные данные получены не из двойника?
TDD: Arrange Act Assert на примере Rhino Mocks 32
А оно точно работает?
Вдруг нужные данные получены не из двойника?
TDD: Arrange Act Assert на примере Rhino Mocks 33
А оно точно работает?
Вдруг нужные данные получены не из двойника?
TDD: Arrange Act Assert на примере Rhino Mocks 34
А оно точно работает?
Вдруг нужные данные получены не из двойника?
TDD: Arrange Act Assert на примере Rhino Mocks 35
Иногда все же нужно
Методы без результатов
TDD: Arrange Act Assert на примере Rhino Mocks 36
Иногда все же нужно
Методы без результатов
TDD: Arrange Act Assert на примере Rhino Mocks 37
Иногда все же нужно
Методы без результатов
TDD: Arrange Act Assert на примере Rhino Mocks 38
Неоправданная сложность
TDD: Arrange Act Assert на примере Rhino Mocks 39
Неоправданная сложность
TDD: Arrange Act Assert на примере Rhino Mocks 40
Сухой остаток
Clean Code и AAA – это хорошо
Rhino Mock – отличный инструмент
Лучше тестировать состояние
Случайные значения в тестах рулят!
TDD: Arrange Act Assert на примере Rhino Mocks 41
СПАСИБО!
СЕРГЕЙ КАЛИНЕЦ http://tdd4.net
EMAIL: [email protected]
SKYPE: sergiikalinets
TWITTER: @skalinets
42TDD: Arrange Act Assert на примере Rhino Mocks