2016-01-20 55 views
0

我使用捕捉库单元测试Catch Lib问题 - 匿名命名空间重新定义。如何解决

以前,我单独测试一个头,并与TEST_CASEs但最终经过包括所有的这些到我面临着很多误区,如项目没有问题这个:

c:\dev\workspace\algolist\src\algolist.hpp(143): error C2374: '`anonymous-namespace'::autoRegistrar143': redefinition; multiple initialization 
c:\dev\workspace\algolist\src\mfactory.hpp(143): note: see declaration of '`anonymous-namespace'::autoRegistrar143' 
c:\dev\workspace\algolist\src\algolist.hpp(143): error C2084: function 'void ____C_A_T_C_H____T_E_S_T____143(void)' already has a body 
c:\dev\workspace\algolist\src\mfactory.hpp(143): note: see previous definition of '____C_A_T_C_H____T_E_S_T____143' 

有人能解释一下这是什么意思?

+0

不知道的框架,但似乎是宏只是基于没有文件名的代码行可能正在创建函数和命名空间的名称,因为这两个文件都在143线东西有一个名称冲突现在 –

回答

1

它看起来像你把TEST_CASE放在HPP文件中,然后在同一个CPP文件中包含它们。您有几种选择:

  • 改为将测试用例移动到CPP文件。这是首选解决方案。
  • 将某个测试用例上移或下移一行,以便自动生成的名称不同,因此不会发生冲突。这是一个短期回来。
  • 如果您真的想通过包含这些测试来共享这些测试,请将测试主体留在头文件中,但删除TEST_CASE宏,而是从CPP文件中的测试用例中调用它们。
+0

是的,我有几个hpp文件作为一个独立的libs,内置于一个二进制文件中,除了代码本身,每个hpp都包含TEST_CASEs,这是一个只有头文件的库,main.cpp只是一个CATCH_CONFIG_MAIN。 – amigo421

+0

通常,测试进入CPP文件。对于只有标题的库没有问题,但是是否希望库的客户端也包含测试? – JBRWilkinson

+0

它由#define定义,但是,您是对的,已经移至分隔文件。你是否有经验?我正在寻找cmake脚本来自动将项目的catch测试提取到ctest中 – amigo421