2011-02-04 66 views
4

我正在开发一个C++中的DLL,并且想要使用Boost Test Libraries来执行该DLL的单元测试。我完全阅读了Boost测试手册,但由于我是新手,因此我有以下问题:用Boost :: Test测试DLL吗?

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

问候,

詹姆斯。

回答

4

你有3种方式来做到这一点:

  1. 你绝对可以做什么其他的答复建议,建立自己的LIB静态。我不会推荐这种方式。

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

  3. 最后你还有另一个选择,你可以把你的测试用例直接放到你的库中。您需要链接共享版本的Boost Test。一旦你的库建好了,你可以像现在这样定期使用它,再加上你可以执行内置的测试用例。要执行测试用例,您需要一个测试运行器。 Boost Test提供了一个名为“控制台测试运行器”的控制台。您需要构建一次,并且可以用于所有项目。使用此测试运行,你可以执行你的单元测试是这样的:

    test_runner.exe --test“your_lib” .dll文件

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

+2

我在哪里可以找到控制台测试运行器BoostTest提供? – StNickolay 2013-09-10 12:52:46

2

你可以先建立自己的DLL作为静态库文件,那么你可以用它来直接编译最终DLL并创建包含升压试验可执行下面是一个例子使用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 gic中,但通常是a bad idea

相关问题