boost单元测试模板产生膨胀的代码。怎么避免呢?

时间:2011-05-15 23:25:58

标签: c++ templates boost

我用boost单元测试库完成了大约一百个简单的测试。不仅我得到很长的编译时间(按照半分钟的顺序),而且生成的可执行文件的大小变得非常大 - 仅仅一百个简单测试就可以达到4MB。如果测试是在不使用boost测试的情况下完成的,则可执行文件大小仅为120kB。

我怎样才能减轻臃肿?这个问题仅仅是因为我感兴趣,而不是我需要测试代码来获得闪亮的性能:)

调试信息已被删除。我已经尝试了所有优化选项但没有成功。

修改

每项测试基本如下:

PlainOldDataObject a, b;

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

2 个答案:

答案 0 :(得分:3)

予。您使用哪种使用方式?如果您使用单元测试框架的单一标头变体,则应切换到离线变体(静态或动态)

II。如果您怀疑BOOST_AUTO_TEST_CASE宏有问题,您有几个选择:

  1. 放弃每个测试用例策略的单个断言并使用“主题”测试用例的数量。我个人认为这是可以接受的。

  2. 使用手动测试用例注册。您可以使用自己的宏来自动化它,以避免繁琐的重复。

  3. 拆分为多个测试文件。您可能会看到至少一些编译时间改进(或可能不会)。

  4. III。如果您怀疑BOOST_CHECK语句,那么您可以做的事情并不多,但我会惊讶地发现它们的开销很大。也许你应该进一步调查。

答案 1 :(得分:0)

尝试使用Loki library:它还有许多常用的通用组件(包括静态断言宏,类似于BOOST_CHECK)。

众所周知,Loki是轻量级的,但比强化更强大,因为它使用基于策略的方法来进行类设计。但是,它没有所有这些工具,只有最常见的工具:智能指针,小型对象分配器,元编程助手,工厂和其他一些工具。但如果您不需要任何像序列化这样可怕的升级库,您可能会发现它满足您的需求。