UPDATED: I am learning about GoogleTest to test C/C++ programs. I heard GoogleTest is a good tool for it. I tried one simple thing, which is to read input from a file, during a TEST() function, and it did not seem to work:
test.cpp
in the google test project:
#include <iostream>
#include <fstream>
#include <filesystem>
TEST(IOTest, ReadFile) {
std::string filename = "input.txt";
std::string buffer;
std::ifstream ifs(filename, std::ios::binary);
std::filesystem::path cwd = std::filesystem::current_path();
std::cout << "Current directory path: " << cwd << std::endl;
std::cout << "Current file path: " << __FILE__ << std::endl;
ASSERT_TRUE(ifs.is_open());
}
The resulting test failed. And the output is:
Current directory path: "C:\\Users\\Tong\\source\\repos\\BookLibrary\\Debug"
Current file path: C:\Users\Tong\source\repos\BookLibrary\GoogleTest\test.cpp
Value of: ifs.is_open()
Actual: false
Expected: true
I placed the file "input.txt" under the current directory, which is:
C:\Users\Tong\source\repos\BookLibrary\GoogleTest\Debug\input.txt
but it seems that the program cannot find or open it.
Am I missing something here? I also tried
std::string filename = "./input.txt";
but still no luck in reading the file.
UPDATE: problem solved; everything was correct except that I had placed the input.txt
file in the wrong folder. It should be placed in
C:\Users\Tong\source\repos\BookLibrary\Debug
and not
C:\Users\Tong\source\repos\BookLibrary\GoogleTest\Debug
Thanks to multiple comments in the original question, I found the root cause of my problem: I did not find my current directory path correctly.
I thought the current directory path was the project directory of the Google Test project. But it was not true. My current directory path was the other project that hosts my main()
function. After knowing this, I placed the file to be read from into the correct current directory path, and the code worked.