单元测试的新手,并且有一个分布在几个dll上的应用程序。有关单元测试应用程序的一些建议是什么?如果我将单元测试放在他们自己的项目中,我只能测试每个dll的已发布接口。大多数人都这样做吗?或者我应该将单元测试与dll中的代码放在一起并在那里进行测试?那时协调所有测试的最佳方法是什么?
我见过的大多数使用各种框架的例子并没有真正解决这个问题,我在其他地方搜索但没有找到太多信息。
感谢。
更新
我想澄清一点,我在dll中有A类和B类。 B类由A类使用,但只暴露A类。我想在重构现有代码之前进行单元测试。 所以问题是我应该将单元测试与dll代码一起直接测试A类和B类和/或在单独的项目中进行单元测试,并通过暴露的A类测试A类和B类?
答案 0 :(得分:2)
我的家庭式方法是建立两个不同的目标:
代码库是相同的,除了main.cpp,它将包含DLL的DLL主体和测试可执行文件的标准C / C ++ int main()。所有单元测试都与实际代码一致,由预处理器#define:
控制#ifdef TESTING
tests here
#endif
可执行文件的main()通过注册框架调用所有测试。
大多数时候我使用定义了TESTING的可执行版本。当我想构建DLL时,我切换目标并取消定义TESTING。
答案 1 :(得分:0)
如果我将单元测试放在他们自己的项目中,我只能测试每个dll的已发布接口。
与客户端代码无法访问的DLL中的功能相反?
如果代码对DLL公开的函数没有贡献,则从代码库中删除它。如果是,那么您可以编写一个测试代码路径。
答案 2 :(得分:0)
一般来说,彻底测试DLL的公共接口应该足够了,正如Pete指出的那样,确实应该运用所有代码路径。
关于Neils的回答,选择一个不需要你构建EXE而是直接对DLL进行操作的测试框架可以进一步简化问题。作为cfix的作者,我自然会建议尝试使用cfix:http://www.cfix-testing.org/
答案 3 :(得分:0)
C ++中的单元测试意味着相当于类测试。 DLL测试将是集成测试。两者都是必要的,但最好尽可能低地测试事物。看看v-model:http://en.wikipedia.org/wiki/V-Model_(software_development)。
答案 4 :(得分:0)
我使用boost.test来测试我的dll和可执行文件。我为每个dll和exe创建一个单独的单元测试项目/可执行文件进行测试。因为我测试了dll的内部,所以我没有将它们与测试项目联系起来,而是包含我想在项目中直接测试的源代码。最后,自动构建运行所有单元测试项目。
我们使用CMake来构建我们的项目,这有一个很好的组件CTest,它为我们捆绑了所有测试并将它们作为一个组运行。