如何获得单元测试(使用CMake和GTest)来知道测试数据的文件夹在哪里



我正在使用CMake和GTest对C++程序进行单元测试。我的一个测试使用fopen()打开一个测试数据文件。

我正在努力想办法不得到一个";没有这样的文件或目录";错误

目录结构

├── CMakeLists.txt
├── build
├── src
│   └── myProgram.cxx
└── tests
├── CMakeLists.txt
├── data
│   ├── dataset1.txt
│   ├── dataset2.txt
│   ├── dataset3.txt
│   └── dataset4.txt
└── myProgramTests.cxx

测试代码

TEST(test, read_data_file) {
// Open test file
std::FILE *f = fopen("inputs/dataset1.txt", "r");
if (f == NULL){
perror ("Error opening file");
}
fclose(f);
}

这看起来很简单,但我不知道该在这里放什么。我试过"dataset1.txt""inputs/dataset1.txt""tests/inputs/dataset1.txt"。我错过了什么/有没有办法让我进入";包括";这些文件是通过CMakeLists.txt中的一行读取的,这样我就可以用上面尝试过的字符串之一读取它们了吗?

摘要:如何正确引用GTest中tests/data子目录中存储的文件的位置?

使用cmake的ctest。它的add_test命令有一个您正在查找的有用属性WORKING_DIRECTORY

不以/开头的路径是相对于当前工作目录的,即运行测试时shell所在的目录。

例如,如果您当前的工作目录是项目的顶级目录,那么到dataset1.txt的相对路径是tests/data/dataset1.txt

最新更新