我正在使用Visual Studio进行单元测试。创建了一个测试项目,其目录位于我正在测试的项目中。
我正在尝试"单元测试"一个打开数据库文件的函数,并根据数据库的内容创建类对象。 函数本身实际上工作正常。
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&lt;&gt;抱着我的课。不要相信这是特别相关的。
我这样称呼函数:
import_materials_from_db("materials.db");
这在主应用程序中很有用,但是只要我在单元测试中尝试它:
import_materials_from_db("test_database.db");
我没有运气。
项目目录:
Advanced_Task_1\
单元测试目录:
Advanced_Task_1\UnitTest1\
为了以防万一,我尝试将数据库文件放在每个目录中。 我试过传递&#34; .. \ test_database.db&#34;等等 最后,值得一提的是,我确信这是正确的文件名,我确信数据库中有信息可供阅读。仍然没有运气。
关于我究竟做错了什么的任何想法?我试过&#34;看看上面的目录&#34;就像我在项目设置中所做的那样#34; .. \&#34;但它也不是那样的。
答案 0 :(得分:0)
我在撰写问题时实际上找到了答案。
我尝试插入整个路径以确定。
"C:\Users\Documents\VisualStudioProjects" etc.
这会产生错误&#34;错误地形成通用字符名称&#34;。
通用字符?他们和backsla有关...哦...... ....
所以我尝试了我的功能(注意/而不是\):
import_materials_from_db("../test_database.db");
它奏效了!
只需要引用单元测试目录(..)上面的目录,并使用正斜杠而不是反斜杠。
仍然想发布这个问题,因为我确定其他人将来会遇到类似的问题。
更有趣的是,这可以通过使用双反斜杠来实现...... \\在这个论坛上是必要的......显然,windows会以同样的方式对待它们(ish)。
所以,答案是,而不是使用:
"..\filename"
使用它:
"..\\filename"
或者这个:
"../filename"