我正在使用Catch Lib进行单元测试

以前,我分别测试了标头,并且对TEST_CASE没问题,但是在将所有这些标头最终都包含到项目中之后,我遇到了很多错误,如下所示:

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'


有人可以解释我的意思吗?

最佳答案

看起来您正在将TEST_CASE放入HPP文件中,然后从同一个CPP文件中将它们都包括在内。您有几种选择:


而是将测试用例移至CPP文件。这是首选的解决方案。
将其中一个测试用例上移或下移,以使自动生成的名称不同,因此不会发生冲突。这是短期的回击。
如果您真的想通过包含它们来共享这些测试的功能,则将测试的主体保留在头文件中,然后删除TEST_CASE宏,然后从CPP文件的测试用例中调用它们。

09-08 09:36