Шаблоны ускоренного модульного тестирования выдают раздутый код.Как этого избежать? - PullRequest
1 голос
/ 16 мая 2011

У меня есть около сотни простых тестов, выполненных с помощью библиотеки тестовых модулей.Я не только получаю очень много времени компиляции (порядка полминуты), но и размер получаемого исполняемого файла становится действительно большим - 4 МБ всего за сотню простых тестов.Если тесты выполняются без использования буст-теста, размер исполняемого файла составляет всего 120 КБ.

Как уменьшить вздутие живота?Этот вопрос только из-за интереса, а не из-за того, что мне нужен тестовый код для блестящей производительности:)

Информация об отладке уже удалена.Я испробовал все варианты оптимизации безуспешно.

РЕДАКТИРОВАТЬ :

Каждый тест в основном выглядит следующим образом:

PlainOldDataObject a, b;

a = { ... initial_data ... };
a = some_simple_operation(a);
b = { ... expected_result ... };
BOOST_CHECK(std::memcmp(&a, &b, sizeof(PlainOldDataObject)) == 0);

Ответы [ 2 ]

3 голосов
/ 16 мая 2011

I. Какой вариант использования вы используете? Если вы используете вариант модульного тестирования с одним заголовком, вам следует переключиться на автономный вариант (статический или динамический)

II. Если вы подозреваете, что макрос BOOST_AUTO_TEST_CASE виноват, у вас есть несколько вариантов:

  1. Откажитесь от единичного утверждения для каждой политики тестов и используйте количество «тематических» тестов. Я лично считаю это приемлемым.

  2. Используйте ручную регистрацию тестовых случаев. Вероятно, вы можете автоматизировать его с помощью собственного макроса, чтобы избежать утомительного повторения.

  3. Разделить на несколько тестовых файлов. Вы можете увидеть хоть какое-то улучшение времени компиляции (или нет).

III. Если вы подозреваете заявления BOOST_CHECK, вы мало что можете сделать, но я был бы весьма удивлен, увидев от них столько накладных расходов. Может быть, вам следует продолжить расследование.

0 голосов
/ 20 декабря 2014

Попробуйте вместо этого использовать библиотеку Loki : она также имеет много часто используемых универсальных компонентов (включая макрос статического утверждения, похожий на BOOST_CHECK).

Loki, как известно, является легковесным, но даже более мощным, чем Boost, потому что он использует основанный на политике подход к дизайну классов. Тем не менее, он не имеет всего этого разнообразия инструментов, только самые распространенные: умные указатели, распределитель небольших объектов, помощники метапрограммирования, фабрики и некоторые другие. Но если вам не нужна ни одна из этих чудовищных улучшающих библиотек, таких как сериализация для бывших, вы можете найти ее удовлетворяющей вашим потребностям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...