【问题标题】:Testing a DLL with Boost::Test?使用 Boost::Test 测试 DLL?
【发布时间】:2011-06-21 03:19:33
【问题描述】:

我正在用 C++ 开发一个 DLL,并希望使用 Boost 测试库对该 DLL 执行单元测试。我彻底阅读了 Boost 测试手册,但由于我是新手,所以我有以下问题:

我应该在开发 DLL 的同一个 VC 项目中添加测试类吗?理想情况下,我想这样做,但我很困惑 DLL 没有 main(),另一方面,Boost 测试需要自己的 main() 才能执行。那么在这种情况下,Boost 测试输出到哪里去了呢? (事实上​​,我实际上实现了这个并且没有看到任何输出:(并且几乎花了两天时间我找出了问题,但没有成功)

问候,

詹姆斯。

【问题讨论】:

    标签: c++ unit-testing visual-c++ boost-test


    【解决方案1】:

    您有 3 种方法可以做到这一点:

    1. 您绝对可以按照其他回复的建议将您的库构建为静态的。不过我不推荐这种方式。

    2. 您的解决方案中可以有一个或多个单独的单元测试项目。这些项目将与您的库以及 Boost Test 库的静态或共享版本链接。每个项目都有一个由 Boost.Test 库提供或由您手动实现的 main。

    3. 最后,您还有另一个选择,您可以将测试用例直接放入您的库中。您需要链接到 Boost Test 的共享版本。构建库后,您可以像现在一样定期使用它,而且您将能够执行内置的测试用例。要执行测试用例,您需要一个测试运行器。 Boost Test 提供一种称为“控制台测试运行器”的工具。您需要构建一次,即可用于所有项目。使用这个测试运行器,你可以像这样执行你的单元测试:

      test_runner.exe --test "your_lib".dll

      您应该了解这种方法的所有优点和缺点。您的单元测试代码将成为您的生产库的一部分。它会使它稍大一些,但另一方面,如果需要,您将能够在生产中运行测试。

    【讨论】:

    • 我在哪里可以找到控制台测试运行器 BoostTest 的耗材?
    【解决方案2】:

    您可以先将 DLL 构建为静态库文件。然后,您可以使用它直接编译您的最终 DLL 并创建一个包含您的 boost 测试的可执行文件。下面是一个使用 boost.build 的例子:

    lib lib_base
        : # sources
            $(MAIN_SOURCES).cpp  # Sources for the library.
        : # requirements
            <link>static
        : : ;
    
    lib dll_final
        : # sources
            lib_base
            $(DLL_SOURCES).cpp   # Sources for DllMain .
        : # requirements
            <link>shared
        : : ;
    
    unit-test test_exe
        : # sources
            lib_base
            $(TEST_SOURCES).cpp  # Sources for the unit tests.
        : # properties
            <library>/site-config//boost/test
        ;
    

    您必须小心,不要在您的 DllMain 中包含任何重要的逻辑,但通常是 a bad idea

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-31
      • 2011-11-07
      • 1970-01-01
      • 2012-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多