首页 > 解决方案 > gtest 单元测试目标配置文件路径

问题描述

在我的 C++ 应用程序中,我有一个文本文件 (dataFile.txt),它安装在 Linux 目标机器的以下路径中:

/SoftwareHomeDir/Configuration/Application/dataFile.txt

此文件存在于我的 Rational ClearCase 源代码环境中的路径下:

/ProjectName/config/Application/dataFile.txt

我正在 gtest 中开发一个 unitTest ,它执行以下操作:

从 中读取特定数据dataFile.txt,如果数据不存在,则将其写入文件。

1)我避免创建一个环境变量来检查我是在编译环境还是目标机器中。然后在最终版本中添加额外的测试代码。我真的很想将测试代码与最终代码分开。

2)我没有使用任何IDE(没有visual studio,没有qt等),只是notepad++

3) 编译。服务器是共享的(使用用户名访问,但是根文件夹“/”是共享的。这意味着如果我创建路径"/SoftwareHomeDir/Confiugration/Application/dataFile.txt",所有用户都可以看到它,如果另一个用户正在运行他的 gtest unitTest,他可能会覆盖我的文件。

4) 在最终的代码中,dataFile的路径是硬编码的,并且在读取之前实现一个filesearch(filename)方法在整个硬盘驱动器中查找文件是非常昂贵的(将需要几秒钟的运行时间)文件。

问题:

我正在寻找一种解决方案来在正在使用的编译环境中对我的代码进行单元测试 /ProjectName/config/Application/dataFile.txt

标签: c++unit-testinggoogletest

解决方案


我的问题的解决方案是将 gmock 与 gtest 结合起来,如链接所述

https://github.com/google/googletest/blob/master/googlemock/docs/CookBook.md#delegating-calls-to-a-fake

我对代码所做的唯一修改是,我没有使用 #define 定义配置数据的路径,而是创建了一个函数 getConfigFilePath(),它返回已安装应用程序中配置文件的硬编码路径。从这里开始,我模拟了这个类,在我的模拟中,我调用了一个假的 getConfigFilePath(),当真正的代码执行时,它返回 ClearCase 中项目树中配置文件的硬编码路径。这正是我想要的。


推荐阅读