Boost.Test 的数据测试用例真的需要 C++11 吗?

Posted

技术标签:

【中文标题】Boost.Test 的数据测试用例真的需要 C++11 吗?【英文标题】:Do Boost.Test's data test cases really require C++11? 【发布时间】:2019-01-15 17:03:32 【问题描述】:

我在特定的企业环境中工作,目前没有 C++11 基础架构。最近我开始编写单元测试并决定使用 Boost.Test 框架,因为 Boost 以其可移植性和企业就绪性而闻名。 虽然一般的 BOOST_AUTO_TEST_CASE 工作得很好,但我发现数据集测试 (BOOST_DATA_TEST_CASE) 最终包含 boost/test/data/monomorphic/fwd.hpp,其中无条件包含 <tuple>。 DATA_TEST_CASE 是否确实需要 C++11?有没有办法使用 BOOST_DATA_TEST_CASE 并利用 Boost 的内置元组和其他附带的库来符合 C++03 标准?

【问题讨论】:

Boost 的哪个版本?你看过发行说明吗? 你应该把精力集中在升级到 C++11 上——真的,没有理由不这样做。你在某个时候必须升级,所以那个时候可能是现在 - C++11 标准问世 8 年后。 @NeilButterworth:我不同意。升级到 C++11 没有意义。他们应该跳过 C++11,直接升级到 C++17。 @Jerry 不,让我们全力以赴去 C++20!但说真的,我一直在这些“企业”环境中。而做任何升级都是一场巨大的政治动荡,会遭到各方的反对,所以你经常不得不拿你能得到的东西。然而,这并不是什么都不做的借口。 如果您无法升级到 C++11 或更高版本,Catch2 有一个 Catch1.x 分支,可以在 C++11 之前的编译器上运行。 【参考方案1】:

Boost 通常不会故意破坏现有库中的 c++11 兼容性(尽管这种态度正在发生变化,您应该期待未来更多的 c++11 要求,请参阅关于 boost 开发人员邮件列表的讨论)。

但是,现有库的新库和新功能不遵守此限制,并且通常需要 c++11,如果这使得实现更容易/更简单/更快/更可靠等。

BOOST_DATA_TEST_CASE 仅在 boost 1.59.0 中引入,因此很可能使用的是 c++11。

一般建议是,如果使用旧编译器,则使用旧版本的 boost。如果您想要新功能升级您的编译器并使用最新版本的 boost。

【讨论】:

以上是关于Boost.Test 的数据测试用例真的需要 C++11 吗?的主要内容,如果未能解决你的问题,请参考以下文章

Boost.Spirit 的单元测试

Boost test vs2013 fatal error C1001

带有 CLion 的 Boost.TEST:“测试框架意外退出”

Unittest 框架之测试固件-----(setUp与tearDown)你真的会用吗?

如何使用 boost C++ 开始单元测试

如何在 mingw64 上使用 boost.test 构建测试?