我正在使用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