18

我正在开发一个程序 C/C++ 项目。公共接口由 4 个函数组成,每个函数都有相当复杂的任务。在同一个cpp文件中,在一个未命名的命名空间中声明了一些辅助函数。正在使用的测试框架是 GTest。

然而,其中一些辅助函数变得复杂到需要它们自己的单元测试。通常,我会将这些助手重构为它们自己的可测试单元,但项目要求声明所有内容都需要在一个cpp中,并且只有指定的功能可以公开可见。

有没有一种方法可以对辅助函数进行单元测试,同时最大限度地减少耦合,并尽可能地遵循项目要求?

我有一个可能的解决方案是使用宏将命名空间转换为命名命名空间用于测试,而未命名用于生产。但是,这似乎比我想要的要混乱一些。

4

1 回答 1

17

匿名namespace中的定义和声明都只在同一个翻译单元中可见。

您可以采用两种方法对这些私有函数进行单元测试。

您可以在您的文件中测试#include整个文件。(ing文件不是重用代码的好方法 - 你不应该在生产代码中这样做!).cpp_test.cpp#include.cpp

也许更好的方法是将私有代码移动到您的项目通常使用的foo::internal namespace地方,并将私有声明放在一个文件中。您的生产文件和测试可以包含此内部标头,但您的客户端不允许。这样,您可以完全测试您的内部实现,而不会将其泄露给您的客户。foonamespace-internal.h.cpp

于 2013-02-09T09:11:19.580 回答