2013-04-08 20 views
2

我在Visual Studio(2012)中有一個本機C++單元測試項目。
在我的一個測試中,我想閱讀包含在我的單元測試項目中的文件。可能嗎?我應該設置哪些文件屬性以及應該使用什麼路徑?如何在本機C++單元測試(Visual Studio)中從項目中打開文件?

我添加了一個test.txt文件到我的項目(並試圖將其內容屬性設置爲true)。在單元測試中,我試圖用這樣的相對路徑打開文件:

std::ifstream file("text.txt"); 

但它不起作用。

我猜應該將文件複製到單元測試運行的地方。有沒有簡單的解決方案呢?

+0

使用完整路徑,如「C:\\ \\ some_dir的text.txt」 – 2013-04-08 08:58:48

+0

即使你想要最終使用相對路徑,首先使用完整路徑來消除該問題的任何其他原因。 – john 2013-04-08 08:59:47

+1

使用絕對路徑我可以打開文件沒有任何問題。但是這對我不起作用,因爲我希望這些單元測試能夠適用於我們團隊中的每個程序員,所以使用相對路徑打開項目所包含的文件非常重要。 – 2013-04-08 11:48:42

回答

3

這可以通過使用__FILE__宏來完成,在我來說,我不喜歡這樣的:

//Returns my solution's directory 
#define TEST_CASE_DIRECTORY GetDirectoryName(__FILE__) 

string GetDirectoryName(string path){ 
    const size_t last_slash_idx = path.rfind('\\'); 
    if (std::string::npos != last_slash_idx) 
    { 
     return path.substr(0, last_slash_idx + 1); 
    } 
    return ""; 
} 

TEST_METHOD(MyTest) 
{ 
    string filename = std::string(TEST_CASE_DIRECTORY) + "MyTestFile.txt"; 

    TestOutputForFile(filename); 
} 
+1

記住__FILE__是編譯時路徑。這是編譯時的完整路徑。這通常很好,因爲單元測試通常運行在與構建相同的環境/機器上。 – Menace 2015-08-28 15:27:17

相關問題