我正在开发一个程序性的C / C ++项目。公共接口由4个函数组成,每个函数都有相当复杂的任务。在未命名的命名空间中,在同一cpp
文件中声明了辅助函数。正在使用的测试框架是GTest。
但是,其中一些辅助函数变得非常复杂,需要自己进行单元测试。通常,我会将这些助手重构为他们自己的可测试单元,但是项目要求说明所有内容都需要在cpp
中,并且只有指定的函数可以公开显示。
有没有办法可以在最小化耦合的同时对辅助函数进行单元测试,并尽可能地遵循项目要求?
我可能的解决方案是使用宏将名称空间转换为命名的名称空间以进行测试,并将其命名为生产名称。但是,这似乎比我想要的更麻烦。
答案 0 :(得分:13)
匿名namespace
中的定义和声明只能在同一个翻译单元中显示。
您可以采用两种方法对这些私有函数进行单元测试。
您可以在#include
文件中.cpp
正在测试的整个_test.cpp
文件。 (#include
.cpp
个文件不是重用代码的好方法 - 您不应该在生产代码中执行此操作!)
或许更好的方法是将私有代码移动到foo::internal
namespace
,其中foo
是您的项目通常使用的namespace
,并将私有声明放入一个-internal.h
文件。您的生产.cpp
文件和测试允许包含此内部标题,但您的客户不允许。这样,您就可以完全测试内部实现,而不会泄漏给客户。