4

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

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

问候,

詹姆斯。

4

2 回答 2

4

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

  1. 您绝对可以按照其他回复的建议进行操作,并将您的库构建为静态的。我不会推荐这种方式。

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

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

    test_runner.exe --test "your_lib".dll

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

于 2011-02-07T23:19:56.473 回答
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中包含任何重要的逻辑,但这通常是个坏主意

于 2011-02-04T08:21:31.407 回答