Юнит-тестирование
Материал из Википедии — свободной энциклопедии
В программировании, юнит-тестирование (англ. unit test) — это процесс, позволяющий проверить на корректность отдельные модули исходного кода программы. Идея состоит в том, чтобы писать тесты для каждой нетривиальной функции или метода. Это позволит достаточно быстро проверить, не привело ли очередное изменение кода к регрессии, т.е. к появлению ошибок в уже написанных и оттестированных местах программы, а также облегчает локализацию и устранение таких ошибок.
Содержание |
[править] Преимущества
Цель юнит-тестирования — изолировать отдельные части программы и показать, что по отдельности эти части — работоспособны.
Этот тип тестирования обычно выполняется программистами.
- Поощрение изменений
- Юнит-тестирование позволяет программистам проводить рефакторинг позже, будучи уверенными, что модуль по-прежнему работает корректно (регрессионное тестирование). Это поощряет программистов к изменениям кода, поскольку достаточно легко проверить, что код работает и после изменений.
- Упрощение интеграции
- Юнит-тестирование помогает устранить сомнения по поводу отдельных модулей и может быть использовано для подхода к тестированию «снизу вверх»: сначала тестируются отдельные части программы, затем программа в целом.
- Документирование кода
- Юнит-тесты можно рассматривать как «живой документ» для тестируемого класса. Клиенты, которые не знают как использовать данный класс, могут использовать юнит-тест в качестве примера.
- Отделение интерфейса от реализации
- Поскольку некоторые классы могут использовать другие классы, тестирование отдельного класса часто распространяется на связанные с ним. Например, класс пользуется базой данных; в ходе написания теста, программист обнаруживает что тесту приходится взаимодействовать с базой. Это ошибка, поскольку тест не должен выходить за границу класса. В результате, разработчик абстрагируется от соединения с базой данных, и реализует этот интерфейс используя свой собственный mock-объект. Это приводит к менее связанному коду, минимизируя зависимости в системе.
[править] Ограничения
Важно понимать, что юнит-тестирование не выловит все ошибки. По определению, оно тестирует только модули сами по себе. Тем самым, вы не выявите ошибки интеграции, проблемы производительности или любые другие проблемы системы в целом. Кроме того, довольно трудно предугадать все варианты исходных данных, которые могут быть переданы модулю в реальной работе. Юнит-тестирование будет эффективным только при использовании совместно с другими способами тестирования.
[править] Инструментарий
Для большинства популярных языков программирования высокого уровня существуют инструменты и библиотеки юнит-тестирования. Некоторые из них:
- JUnit (JUnit.org) — для Java
- NUnit [1] — для языков платформы .NET: C#, Visual Basic .NET и др.
- Для C++
- DUnit [4] - для Delphi
- Для Perl
- PHPUnit [7] — PHP
- PyUnit [8] — Python
- VbUnit [9] — Visual Basic
- utPLSQL [10] — PL/SQL
- Для ActionScript 2.0 — язык сценариев, используемый в программе Macromedia Flash
- Test::Unit [13] - для Ruby