Yoksel: ДопиливаниеCppUnit ...
SourceForge.net Logo

Home Page | Изменения / НовыеКомментарии / Справка / Помочь проекту | Вход:  Пароль:  

Блог Допиливание CppUnit


Всем хорош Cpp Unit?, но есть у него пара недостатков...

Многословность описания набора тестов


Рассмотрим, как определяется набор тестов в Cpp Unit? «прямо из коробки»:


Заголовочный файл:


cpp-файл:


Файл с регистрацией всех тестов:


Довольно многословно и скоро это начинает утомлять. Упростить можно добавлением в проект таких макросов:


Теперь определение набора тестов выглядит так:


Заголовок:


В cpp-файле CPPUNIT_TEST_SUITE_NAMED_REGISTRATION писать больше не надо.


В файле с описанием тестов регистрация теста теперь выглядит так:


Скорее всего, можно упростить больше, но пока достаточно и так.

Раздутый код

В Йокселе основной тестовый модуль достиг размера в 11Мб. При этом линковка стала занимать уже вполне заметное время. Не такая уж большая проблема, но «стало интересно»... Проблема оказалась в макросе CPPUNIT_ASSERT. Макрос выглядит следующим образом:



Как видно из кода, макрос выполняет вызов метода failIf структуры Asserter и передает ему два объекта: Message и Source Line?. Конструкторы этих передаваемых объектов определены в заголовочном файле и, поэтому, инлайнятся при вызове. В результате получается, что для каждого использования CPPUNIT_ASSERT генерится очень немаленький объем кода. Для пробы макрос был заменен на такой:



Функция Spread Sheet Tests?::Fail If? выглядит так:


Эта нехитрая замена сразу же привела к уменьшению основного тестового модуля с 11Мб до 8Мб. При этом получено некоторое ускорение проверок. В исходном варианте аргументы Asserter::failIf конструировались даже для случая, когда проверка проходила успешно. В новом варианте они конструируются только при ошибке. Правда, визуального ускорения получено не было – все и так работает достаточно быстро.


Ссылок на эту страницу нет


 
Файлов нет. [Показать файлы/форму]
Комментариев нет. [Показать комментарии/форму]