C++ 寻求对单元测试C+的建议+;应用程序分布在几个DLL上

C++ 寻求对单元测试C+的建议+;应用程序分布在几个DLL上,c++,unit-testing,dll,C++,Unit Testing,Dll,新的单元测试,并有一个应用程序,是分散在几个DLL。对应用程序的单元测试有什么建议?如果我将单元测试放在它们自己的项目中,我只能测试每个dll的已发布接口。大多数人都是这样做的吗?或者我应该把单元测试和DLL中的代码放在一起,然后在那里进行测试?在这一点上协调所有测试的最佳方式是什么 我看到的大多数使用各种框架的示例都没有真正解决这个问题,我在其他地方搜索过,但没有找到太多信息 谢谢 更新: 我想澄清一下,我有一个dll中的类a和类B。A类使用B类,但仅暴露A类。我想在重构现有代码之前先进行单元

新的单元测试,并有一个应用程序,是分散在几个DLL。对应用程序的单元测试有什么建议?如果我将单元测试放在它们自己的项目中,我只能测试每个dll的已发布接口。大多数人都是这样做的吗?或者我应该把单元测试和DLL中的代码放在一起,然后在那里进行测试?在这一点上协调所有测试的最佳方式是什么

我看到的大多数使用各种框架的示例都没有真正解决这个问题,我在其他地方搜索过,但没有找到太多信息

谢谢

更新:

我想澄清一下,我有一个dll中的类a和类B。A类使用B类,但仅暴露A类。我想在重构现有代码之前先进行单元测试。
因此,问题是我是否应该将单元测试与dll代码放在一起,直接测试A类和B类,和/或将单元测试放在一个单独的项目中,并通过公开的A类测试A类和B类?

我的方法是构建两个不同的目标:

  • DLL本身
  • 测试可执行文件
除了main.cpp之外,代码库是相同的,main.cpp将包含用于DLL的DLL main和用于测试可执行文件的标准C/C++int main()。所有单元测试都与实际代码一致,由预处理器控制#定义:

可执行文件的main()通过注册框架调用所有测试

大多数时候,我使用的是定义了测试的可执行版本。当我想要构建DLL时,我会切换目标并取消定义测试

如果我将单元测试放在它们自己的项目中,我只能测试每个dll的已发布接口

与DLL中客户端代码无法访问的功能相反


如果代码对DLL公开的函数没有贡献,则将其从代码库中删除。如果是这样,那么您可以编写一个测试来执行该代码路径。

一般来说,彻底测试DLL的公共接口就足够了,正如Pete所指出的,应该确实执行所有代码路径


关于Neils的回答,选择一个不需要构建EXE,而是直接在DLL上运行的测试框架可以进一步简化问题。作为CFIX的作者,我自然推荐给CFIX一个尝试:

< P>单元测试在C++中意味着相当于类测试。DLL测试更像是集成测试。两者都是必要的,但最好在尽可能低的级别上进行测试。看看v-model:。

我用来测试DLL和可执行文件。我为每个要测试的dll和exe创建一个单独的单元测试项目/可执行文件。因为我测试dll的内部结构,所以我不会将它们与测试项目链接,而是将要直接测试的源代码包含在项目中。最后,自动构建运行所有单元测试项目

我们用来构建我们的项目,这有一个很好的组件CTest,它为我们打包了所有的测试,并作为一个组运行它们

#ifdef TESTING
tests here    
#endif