在测试遗留C代码时尝试使用TEST_GROUP_BASE共享测试组时链接器错误

时间:2012-09-11 16:43:41

标签: unit-testing cpputest

我们尝试通过使用TEST_GROUP_BASE来创建共享基类来减少代码重复。当我们尝试在多个测试类中使用此TEST_GROUP_BASE时,我们会收到链接器警告抱怨'getwchar'和'putwchar':不一致的dll链接和报告这两个函数的多个定义的错误,以及许多其他'char'/ 'wchar'对(例如strchr / wcschr,strpbrk / wcspbrk)。如果我只包含一个使用TEST_GROUP_BASE宏的测试文件,则不会出现链接器错误。

基类被定义为.h文件中的TEST_BASE,内联所有成员函数。然后,此.h文件包含在派生的测试文件中,其中TEST_GROUP_BASE宏用于合并共享的TEST_BASE。我错过了什么吗?

我没有设法找到任何使用TEST_GROUP_BASE的例子,所以我不确定我是否错过了一个关键的配置。我们正在测试遗留的C代码,但所有对生产代码的引用都是在extern“C”括号内进行的,因为我们的简单测试通过了这表明c / c ++链接正常。

任何人都可以提出任何可能的原因,或者指出我在其他地方如何使用TEST_GROUP_BASE的任何开源示例的方向?

开发环境是VS2010。

1 个答案:

答案 0 :(得分:0)

我不太确定为什么putwchar和getwchar上有错误,这可能与TEST_BASE和TEST_GROUP_BASE无关,但可能与它们内联并且头文件包含在不同的链接中有关。如果没有代码示例,很难找出不同链接问题的来源,特别是当您提到它只能使用一个TEST_GROUP_BASE时。

解决此问题的最佳方法可能是不将所有TEST_BASE函数内联到头文件中。 TEST_BASE宏实际上是“struct testBaseClass:public Utest”的非常简单的替代品。所以TEST_BASE就是任何从Utest中分类的类。这意味着您可以简单地将实现放在cpp文件中。

您无法找到TEST_GROUP_BASE的大量用法的原因之一是许多人(包括我)建议不要使用它。将要重用的部分放在单独的类中并在TEST_GROUP中使用(而不是派生)该类通常会更灵活。这允许许多较小的“夹具”类可以在不同的测试中重复使用。

希望这有帮助。