VS单元测试无法打开数据库(sqlite3)
问题描述:
我正在使用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”等等。 最后,值得一提的是,我确信这是正确的文件名,我确信数据库中有信息可以读取。仍然没有运气。
关于我在做什么错误的任何想法?我尝试了“看上面的目录”的技巧,就像我在项目设置中所做的那样“..”,但它也不喜欢那样。
答
我在写问题的时候发现了答案。
我试图插入整个路径只是为了确保。
"C:\Users\Documents\VisualStudioProjects" etc.
这产生了错误“不正确形成的通用字符名称”。
通用字符?他们与backsla ......喔做....
所以,我想我的功能,像这样(注意的/,而不是\):
import_materials_from_db("../test_database.db");
和它的工作!
只需引用单元测试目录(..)上方的目录,并使用正斜杠而不是反斜杠。
仍然想发布这个问题,因为我确信其他人将来会有类似的问题。
更有趣的,这可能是使用双反斜线实现...\ \如在这个论坛上是必要的...显然Windows以相同的方式对待它们(ish)。
所以,答案,而不是使用:
"..\filename"
使用本:
"..\\filename"
或本:
"../filename"