artbear писал(а) 20. Марта 2008 :: 06:52:Олег, а твои впечатления, найденные баги, удобство написания тестов и т.д. опиши, плиз ЗЫ твой блог про твою правку СППЮнит я уже прочел.
Дело в том, что CppUnit был первой системой тестирования, которая мне подвернулась. Возможно, она не самая лучшая - здесь я оценить не могу, т.к. вплотную использовал только CppUnit. Багов в нем вроде бы не находил кроме разве что:
1) когда пытался использовать GUI-модуль в компоненте, он подвисал - поэтому пришлось интегрировать CppUnit с 1С. Впрочем, так даже лучше получилось - меньше окон вылазит.
2) Пухловатый код CPPUNIT_ASSERT'а. Но это исправляется. Но про это ты уже читал
Основное неудобство CppUnit из коробки - многословность в описании набора тестов. Некоторыми правками многословность можно уменьшить, но некоторая избыточность все же остается.
А так, в общем-то, достаточно удобно.
Например, уже есть набор предопределенных макросов: для проверки логического условия, для проверки равенства объектов, для проверки равенства величин типа double, для проверки того, что код выкидывает или не выкидывает исключение и т.д.
Где-то на РСДН была тема, как улучшить макросы CppUnit, чтобы при ошибке они выдавали более подробную информацию. Например, нужно проверить условие a + b > c.
Пишем CPPUNIT_ASSERT (a + b > c). При ошибке он выдаст что-то типа
assertion failed: a + b > c
Переделанный макрос выдаст: assertion failed: a + b > c : 2 + 3 > 6
Если код теста приводит к AV, то тестирование не прекращается - и обрабатываются все тесты. В принципе, это должно быть удобно для случаев, когда на проход всех тестов нужно несколько часов - здесь остановка тестирования из-за одного глючного теста была бы крайне плохим вариантом. Хорошо, что это не мой случай - все тесты прогоняются за 1-2 сек.
Вообще, возможно есть более удобные системы юнит-тестирования - например, в boost. Вроде бы там даже уже есть "умные" ассерты типа того, что я описывал выше.