c++ - 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
解决方案
我的问题的解决方案是将 gmock 与 gtest 结合起来,如链接所述
我对代码所做的唯一修改是,我没有使用 #define 定义配置数据的路径,而是创建了一个函数 getConfigFilePath(),它返回已安装应用程序中配置文件的硬编码路径。从这里开始,我模拟了这个类,在我的模拟中,我调用了一个假的 getConfigFilePath(),当真正的代码执行时,它返回 ClearCase 中项目树中配置文件的硬编码路径。这正是我想要的。
推荐阅读
- reactjs - React 如何执行这个特定的代码
- r - 如何使用 set.seed() 函数在 R 中生成随机样本?
- c++ - 在 lambda 函数中保存其返回值时,std::ranges::sort 不能用作“constexpr”函数
- python - 如何在一个时间范围内按多列查找重复行
- swift - macOS Catalina 10.15.6、Xcode 11.6、Mac Catalyst 应用程序中的 PCH 文件和 SwiftShims 错误中的 Objective-C 运行时不同
- python - ValueError:无法将字符串转换为浮点数:使用 matplotlib、arduino 和 pyqt5 时
- javascript - 如何在 Ejs 模板中打印 Web 抓取的项目?
- asp.net - MAC OS 上 Firefox 和 Chrome 的重音字母
- python - Pandas 行列转换
- android - 如何在配套设备配对屏幕中捕捉用户取消?