【问题标题】:Can I link multiple BOOST unit tests into a single test binary?我可以将多个 BOOST 单元测试链接到一个测试二进制文件中吗?
【发布时间】:2013-01-20 20:52:57
【问题描述】:

我最近开始尝试测试一个古老的大型(>100 万行)程序。目前没有单元测试。此外,程序链接为每个单独的文件链接在一起 - 没有组件库。此外,对象是高度相互依赖的,如果不链接到至少一半的对象文件,就很难(不可能?)链接到任何对象文件。

是的,我知道,我的生活很糟糕。

我想做一些重构(显然),但我想在开始移动之前进行一些测试。我目前的想法是编译一个运行我创建的所有测试的“测试程序”。这将大大简化我遇到的链接问题,让我专注于真正的问题。所以我有两个问题:

  • 是否可以将多个 BOOST 单元测试文件链接到一个测试可执行文件中?
  • 有更好的解决方案吗?

【问题讨论】:

  • 看起来可能有办法做到这一点。后续更新。

标签: c++ unit-testing testing boost automated-tests


【解决方案1】:

我猜,这正是使用 boost 测试的方法。 我会保留一个简短的 main.cpp 文件,其中包含 2 行:

#define BOOST_TEST_MODULE "C++ Unit Tests for MyTangledLibrary"
#include <boost/test/included/unit_test.hpp>

然后我会继续添加测试模块 *.cpp 文件一起编译成一个可执行文件

#include <boost/test/unit_test.hpp>
<< your include files >>

BOOST_AUTO_TEST_SUITE(FancyShmancyLogic)

BOOST_AUTO_TEST_CASE(TestingIf2x3equals6)
{
  ...
}

BOOST_AUTO_TEST_CASE(TestingIf2x2equals4)
{
  ...
}

BOOST_AUTO_TEST_SUITE_END()

是的,您将能够将该 main.cpp 和您的所有模块编译成一个大型可执行文件。

【讨论】:

  • 当我尝试这个时,测试编译并链接,但在执行时我得到:测试设置错误:测试树为空
  • 您还需要将所有模块 *.cpp 文件包含到 main.cpp 中。否则测试运行者不知道你的测试。
  • @Ace7k3,我认为 #include 一个 .cpp 文件是不好的做法。这是一个例外吗?
  • @Ace7k3:单独编译 .cpp 文件并将它们链接到单元测试可执行文件中对我来说很好。
  • @tjwrona,包含在项目中而不是源中的#include。
猜你喜欢
  • 1970-01-01
  • 2013-12-25
  • 2013-06-28
  • 1970-01-01
  • 2014-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多