2017-11-18 253 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"