是否可以模拟或重载直接引用Boost :: Filesystem(.hpp)?

时间:2013-04-23 17:19:24

标签: c++ unit-testing mocking

我正在尝试帮助在Qt C ++应用程序中围绕控制器设计一些单元测试。

坦率地说,我有两大缺点。一,我的测试背景主要基于.NET项目,所以我对c ++世界最佳实践的了解最多。二,我正在研究的应用程序的设计者没有考虑单元测试的代码。

一个特定的要点,我正在看一个包含boost / filesystem / operations.hpp的控制器类。控制器构造函数继续检查目录是否存在,并使用boost文件系统代码中的函数创建目录。

有没有办法超载或模仿这种行为?我习惯于在.NET中设置IoC容器或至少依赖注入的构造函数,然后能够在单元测试代码中传递模拟对象。我不确定模板化头文件如何与该概念一起使用,或者如果它甚至是c ++中的典型实践。

目前,我无法灵活地建议更改代码,因为本周会有一个版本构建。但在那之后,如果有一些简单的代码更改可以提高可测试性,那绝对是一个选择。理想情况下,有一种方法可以在单元测试框架中重载文件系统函数。

2 个答案:

答案 0 :(得分:1)

我们最终创建了一个通用文件系统包装器,它调用Boost文件系统并接受它作为我们的类构造函数的参数,因此我们可以在单元测试时发送模拟版本。

我理解不要嘲笑这个想法,但我认为我们的CI环境的快速单元测试在检查时运行以及实际命中文件系统的测试是有价值的。

答案 1 :(得分:0)

boost::filesystem视为一个似乎是合理的 标准库的扩展。所以你嘲笑(或不嘲笑) 与模仿std::istream之类的内容完全相同。 (一般来说,你当然不会嘲笑它,而是你的测试 框架提供了必要的环境:您需要的文件 阅读std::istream,目录等 boost::filesystem。)