c++ - boost 单元测试模板会产生臃肿的代码。如何避免这种情况?

标签 c++ templates boost

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

如何减轻肿胀?这个问题只是因为兴趣,而不是我需要测试代码才能有 Shiny 的性能:)

调试信息已经被剥离。我已经尝试了所有优化选项,但都没有成功。

编辑:

每个测试基本如下:

PlainOldDataObject a, b;

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

最佳答案

我。您使用哪种用法变体?如果您使用单元测试框架的单一 header 变体,您应该切换到离线变体(静态或动态)

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

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

  2. 使用手动测试用例注册。您或许可以使用自己的宏将其自动化,以避免乏味的重复。

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

三。如果您怀疑 BOOST_CHECK 语句,您无能为力,但看到它们的开销如此之大,我会感到很惊讶。也许您应该进一步调查。

关于c++ - boost 单元测试模板会产生臃肿的代码。如何避免这种情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6011957/

相关文章:

c++ - 用于矩阵乘法的快速 LAPACK/BLAS

c++ - 返回空指针的用户定义的 operator new

c++ - 编译双重比较函数时出现 Emscripten 错误 'IsAlmostEqual'

c++ - C++代码中的 “Undefined reference to operator<<”错误

c++ - 为什么不自动确定类模板构造函数参数?

c++ - 多读/单写类的线程安全

c++ - 为什么我不能在 ATL 对话框中托管的 Winform 中输入文本?

javascript - pure.js 必须与现有页面节点一起使用吗?

c++ - 使用logging::init_from_stream boost 日志格式单个属性

c++ - boost::recursive_variant 接受 map,但拒绝 unordered_map