0

我们试图通过使用 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。

4

1 回答 1

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 中使用(而不是派生)该类通常更灵活。这允许许多较小的“夹具”类可以在不同的测试中重复使用。

希望这可以帮助。

于 2012-12-13T03:04:56.673 回答