2017-11-18 251 views
0

我正在使用Visual Studio進行單元測試。創建一個測試項目,其目錄位於我正在測試的項目內。VS單元測試無法打開數據庫(sqlite3)

我想「單元測試」一個函數打開數據庫文件,並根據數據庫的內容創建類對象。 函數本身實際上工作正常。

bool import_materials_from_db(const char *db_name){ 
    sqlite3 *db; 
    int rc = sqlite3_open_v2(db_name, &db, 2, NULL); 
    if (rc != SQLITE_OK) { 
     std::cout << "The database \"" << db_name << "\" was not found.\n"; 
     return false; 
    } 
} 

我已經明顯減少了功能,因爲這是失敗的地方。 RC表示錯誤代碼SQLITE_CANTOPEN(14)。 傳遞給函數的另一件事是持有我的類的std :: vector <>。不要相信這是特別相關的。

我調用該函數像這樣:

import_materials_from_db("materials.db"); 

這主要應用中的偉大工程,但只要我試試我的單元測試中:

import_materials_from_db("test_database.db"); 

我有沒有運氣。

項目目錄:

Advanced_Task_1\ 

單元測試指南:

Advanced_Task_1\UnitTest1\ 

我試圖以防萬一把數據庫文件中的每個目錄中。 我嘗試過傳遞「.. \ test_database.db」等等。 最後,值得一提的是,我確信這是正確的文件名,我確信數據庫中有信息可以讀取。仍然沒有運氣。

關於我在做什麼錯誤的任何想法?我嘗試了「看上面的目錄」的技巧,就像我在項目設置中所做的那樣「..」,但它也不喜歡那樣。

回答

0

我在寫問題的時候發現了答案。

我試圖插入整個路徑只是爲了確保。

"C:\Users\Documents\VisualStudioProjects" etc. 

這產生了錯誤「不正確形成的通用字符名稱」。

通用字符?他們與backsla ......喔做....

所以,我想我的功能,像這樣(注意的/,而不是\):

import_materials_from_db("../test_database.db"); 

和它的工作!
只需引用單元測試目錄(..)上方的目錄,並使用正斜槓而不是反斜槓。

仍然想發佈這個問題,因爲我確信其他人將來會有類似的問題。


更有趣的,這可能是使用雙反斜線實現...\ \如在這個論壇上是必要的...顯然Windows以相同的方式對待它們(ish)。

所以,答案,而不是使用:

"..\filename" 

使用本:

"..\\filename" 

或本:

"../filename"