unit tests

24
Цуканов Павел [email protected] Unit тесты теория и практика

Upload: pavel-tsukanov

Post on 16-Nov-2014

1.518 views

Category:

Technology


0 download

DESCRIPTION

Theory and practice of unit tests

TRANSCRIPT

Page 1: Unit tests

Цуканов Павел

[email protected]

Unit тесты теория и практика

Page 2: Unit tests

Содержание• Что такое Unit тесты и с чем их едят

• Unit Test инструменты

• Изоляция в Unit тестах

• От теории к практике

• Вредные советы

• Требования к тестам

• Правила оформления

Page 3: Unit tests

Что такое Unit тесты и с чем их едят

• Unit – это атом тестирования.

• Тест пишут программисты

• Тесты показывают насколько корректно работает та или иная часть программы

Page 4: Unit tests

Преимущества Unit тестов• Поощрение изменений

• Упрощение интеграции

• Документирование кода

• Отделение интерфейса от реализации

Page 5: Unit tests

Ограничения Unit тестов• Unit тесты могут показать только наличие ошибки, а не

их отсутствие.

• Тесты требуют много кодирования (тесты могут занимать от 50 до 80%).

• Не всё можно проверить

• Сам тест может содержать ошибки

• Важна строгая дисциплина при разработке. Тесты должны быть запущены вовремя и выявленные ошибки были немедленно устранены

Page 6: Unit tests

Unit Test инструменты• Unit тесты разрабатываются для различных языков

программирования (см. http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks)

• Для создания тестов нужен framework. Наиболее часто используемые для .Net

• Nunit (www.nunit.com)

• xUnit ( xunit.codeplex.com)

• Visual Studio Unit Test Framework

• Интеграция со средой разработки.

• ReSharper

• TestDriven.net

• Visual Studio

• Continuous integration серверы.

• TeamCity

• CruiseControl

• Team Foundation Server

Page 7: Unit tests

Изоляция в Unit тестах• Тест не должен иметь других зависимостей, чем сам

тестируемый код

• Это нужно для того, чтобы исследовать поведение тестируемого кода, а не его окружения (другого кода или ресурсов)

• По степени изоляции тесты можно разделить на

• Unit тесты

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

• Функциональные тесты

• Системные тесты

Page 8: Unit tests

Изоляция. Unit тесты

Unit тест

Class

Class

Class

Внешний

ресурс

Внешний

ресурс

Page 9: Unit tests

Изоляция. Интеграционные тесты

Unit тест

Class

Class

Class

Внешний

ресурс

Внешний

ресурс

Page 10: Unit tests

Изоляция. Функциональные тесты

Unit тест

Class

Class

Class

Внешний

ресурс

Внешний

ресурс

Page 11: Unit tests

Изоляция. Системные тесты

Unit тест

Class

Class

Class

Внешний

ресурс

Внешний

ресурс

Page 12: Unit tests

Изоляция. Основная идея

Тест

Испытываемая системаТестируемый объект

Page 13: Unit tests

Изоляция. Основная идея

Тест

Испытываемая система

Тестируемый объект

Page 14: Unit tests

Изоляция. Test Doubles

• Dummies (Пустые объекты)

• Stubs (Заглушки)

• Fakes (Поддельные объекты)

• Spies (Шпионы)

• Mocks (Объекты имитаторы)

Page 15: Unit tests

Изоляция. Dummies (Пустые объекты)

Page 16: Unit tests

Изоляция. Stubs (Заглушки)

Page 17: Unit tests

Изоляция. Fakes (Поддельные объекты)

Page 18: Unit tests

Изоляция. Spies (Шпионы)

Page 19: Unit tests

Изоляция. Mock (Объекты имитаторы)

• TypeMock (http://www.typemock.com, Платная)

• RhinoMock (https://github.com/ayende/rhino-mocks, Бесплатная)

• MOQ (http://code.google.com/p/moq/, Бесплатная )

Page 20: Unit tests

От теории к практике

• Посмотрим на реальном примере как можно применить теорию на практике

• Рассмотрим пример небольшой библиотеки и тесты для неё.

Page 21: Unit tests

Вредные советы

• Тесты создавать никогда не рано и никогда не поздно

• Если не знаете с чего начать, то начинайте с мест, где есть чёткая, заранее задокументированная логика

• Если вы думаете, что логика тестируемого кода будет сильно изменена. Взвесите все за и против прежде чем писать тесты.

• Хорошей практикой считается создание тестов, на найденный баг.

• Будьте добры к коллегам, потому как тесты в первую очередь адресованы им

Page 22: Unit tests

Требования к тестам

• Тесты должны быть переносимыми, и не зависть от конфигурации компьютера, на котором они написаны

• Тесты должны быть быстрыми

• Не допускаются в тестах ни условия, ни циклы

• Тест должен быть лаконичным. Если не получается, попробуйте спрятать всю лишнюю обработку в хелперы. Краткость – сестра таланта!

• Тест не должен проверять все возможные ситуации(и тем более позитивные и негативные тесты). Допускается вложение 2-3 ситуаций совпадающих по контексту, который должен следовать из названия теста.

• Следуйте установленным правилам оформления тестов

Page 23: Unit tests

Правила оформления тестов • Название тестового класса - тестовый класс должен называться

относительно класса, который должен быть протестирован с добавлением окончания Test. Допускается, иногда, для группировки сложных однотипных тестов вместо Test использовать Scenarios

• Название тестирующего метода(теста) - должно быть не слишком длинным и должно следовать из контекста, того что вы тестируете. В названии не должно быть слов Test и Scenario. Это и так понятно.

• Тест должен быть построен по ААА шаблону - т.е. должен содержать 3 зоны Arrange-Act-Assert. В зоне Arrange вы настраиваете контекст, в зоне Act выполняете тестируемое действие, в зоне Assert производите различные проверки.

• Тест должен быть качественно отформатирован - в нем не должно быть лишних пустых строк и т.д.

• В тесте должны присутствовать комментарии - обычно их пишут в зонах разделения теста, а так же в особо сложных местах. Но переусердствовать не надо...

• Фиксируйте написанные тесты в комментариях к тестируемому члену класса - это позволит быстро выходить на тесты, которые проверяют данный член класса.

Page 24: Unit tests

Спасибо за внимание!