繁体   English   中英

单元测试未命名的命名空间中的C ++代码

[英]Unit Testing C++ Code in an Unnamed Namespace

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

但是,其中一些辅助函数变得非常复杂,需要进行自己的单元测试。 通常,我会将这些帮助器重构为它们自己的可测试单元,但项目要求说明所有需要在一个cpp ,并且只有指定的函数可以公开显示。

有没有一种方法可以在最小化耦合的同时对辅助功能进行单元测试,并尽可能地遵循项目要求?

我可能的解决方案是使用宏将命名空间转换为命名的命名空间以进行测试,并为生产命名。 然而,这似乎比我想要的更麻烦。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM