Так получилось, что пару недель назад понадобилось мне порисовать пару-тройку юнит-тестов. Так, для себя, чтобы не терять сноровку. На работе у нас сейчас как-то стихийно начал использоваться CxxTest. Почитав неплохое, в общем,
сравнение всяких фреймворков я даже не стал спорить, но лично мне эта штука по ряду причин не понравилась. В википедии обнаружился прекрасный
список, из которого были выбраны те названия, которые раньше мне никогда не попадались. После выбрасывания всего слишком скучного остались две библиотеки. Вот про них чуть-чуть подробнее.
Catch. Забавный фреймворк. В принципе, довольно традиционен. Регистрация тестов автоматическая, спрятана в макросы. По внешнему виду тесты мало отличаются от того, что можно увидеть почти везде.. Однако, одна отличительная особенность выделяет этот фреймворк из всех остальных. Вместо традиционных ASSERT, ASSERT_EQUAL, ASSERT_LESS и т.д. используется один макрос REQUIRE (или CHECK), который сам умеет разбираться что за выражение ему подсунули и как его красиво вывести, при обнаружении проблем.
TUT. пожалуй самый необычный фреймворк из всего, что мне когда-либо попадалось. Построен вообще без применения макросов. Работает template-magic, которая и заставляет тесты автоматически регистрироваться, да и вообще всё это хозяйство шевелиться. Непривычны здесь два момента: у тестов нет названий, только номера (хотя присоединить к тесту строчку для показа в выводе вполне можно), а при обнаружении проблемы точный номер строчки узнать не получится (из-за принципиального неиспользования макросов этой информации у фреймворка просто нет). Ни первое ни второе не является для меня проблемой. Тесты должны быть короткими, а осмысленные названия тестам придумывать - та ещё работа. :) В общем, именно на этом фреймворке я пока и остановился. Буду мучить и искать что же мне в нём не нравится.
Что обидно, так это то, что в одной из отсмотренных библиотек не реализована прекраснейшая фишка из
cgreen. Там каждый тест запускается в своём процессе (после fork), что даёт гарантированно изолированную среду для каждого теста, а также возможность ловить совсем грубые ошибки, приводящие к SIGSEGV и подобному. нигде, кроме cgreen не видел.