Thursday, August 13, 2009

Unit Testing Frameworks - Инструменты юнит-тестирования

Сегодня юнит-тестирование применяется во всех серьёзных софтверных компаниях и инструментов для проведения такого рода тестов появилось очень много. Microsoft даже включила собственный механизм юнит-тестирования .Net приложений в Visual Studio 2008 Pro. Но раз уж я больше специализируюсь на так называемом unmanaged C++ и более интересуюсь свободным ПО, то и писать буду про открытые инструменты тестирования C++ кода. Большое количество ссылок с описанием таких инструментов можно найти на странице C/C++ unit testing tools проекта www.opensourcetesting.org.

Благодаря многочисленным книгам по разработке ПО, среди которых такие бестселлеры, как "Рефакторинг" Мартина Фаулера, пожалуй, наиболее известный инструмент юнит-тестирования - это xUnit (cppUnit для C++, JUnit для Java, phpUnit для PHP, ...). Надо сказать, что написан он был прежде всего для Java (JUnit), а потом уже появились версии для других языков. Довольно хороший инструмент, но не самый лучший, на мой взгляд, именно для C++. Лично мне не нравится то, что при написании тестов приходится много писать служебного кода (наследовать от базового класса и реализовывать методы setup и tear down. Хочется минимум лишнего, компактнее код. Так как инструмент портирован с Java, он не использует многих возможностей C++.

Последнее время всё популярнее становятся фреймворки, построенные на макросах, среди которых Boost Test, googletest и UnitTest++. Фраймворки google и boost имеют больше возможностей, чем UnitTest++ и продолжают развиваться, но большое достоинство UnitTest++ - возможность быстрого старта, благодаря простоте и подробному руководству по установке для Visual Studio.

Я думаю, для пользователей Visual Studio, желающих познакомиться с юнит-тестированием идеально подойдёт UnitTest++. Чтобы начать работать с этим фреймворком достаточно скачать исходники, открыть солюшн в Visual Studio и запустить сборку. Готовый UnitTest++.vsnet2005.lib можно использовать в своём проекте. Для начинающих имеется пошаговое руководство использования UnitTest++, на примере тестового приложения показывающее как настраивать проект и как применять инструменты тестирования. Скорее всего вы легко сможете разобраться с UnitTest++ за один вечер и сразу начать его использовать. Для получения информации об использовании фреймворка имеется краткая справка. Справка действительно очень короткая - на одну страницу. С одной стороны так проще начать работать, не утруждая себя утомительным чтением, а с другой стороны, чтобы сделать что-то выходящее за рамки описанного, придётся смотреть исходные коды и гуглить.

Boost Test не имеет такой удобной краткой справки по развёртыванию и, если вы не знакомы с boost, придётся сначала прочесть документацию о том как скомпилировать библиотеку и в какой конфигурации (статической или динамической), затем перейти к справке по подключению библиотеки к проекту и уж только разобравшись с этим начинать работать. Но разобравшись вы получите мощный инструмент юнит-тестирования с хорошей документацией и обширными возможностями, очень гибкий и переносимый.

Документация по сборке библиотек boost приводится в руководстве Getting Started для Windows и Unix (Linux, MacOS). Скачать исходники можно там же с официального сайта.

В одной из следующих статей я подробно опишу процесс сборки и использования Boost Test в проекте Visual Studio.

Кроме перечисленных инструментов юнит-тестирования существуют и другие. Большой список бесплатных инструментов юнит-тестирования с описанием и ссылками вы можете найти на странице Open source C/C++ developer testing tools. На том же сайте есть ссылки на инструменты тестирования для других языков программирования.

No comments: