VS单元测试无法打开数据库(sqlite3)

时间:2017-11-18 13:55:04

标签: c++ visual-studio unit-testing c++11 sqlite

我正在使用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;但它也不是那样的。

1 个答案:

答案 0 :(得分:0)

我在撰写问题时实际上找到了答案。

我尝试插入整个路径以确定。

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

这会产生错误&#34;错误地形成通用字符名称&#34;。

通用字符?他们和backsla有关...哦...... ....

所以我尝试了我的功能(注意/而不是\):

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

它奏效了!
只需要引用单元测试目录(..)上面的目录,并使用正斜杠而不是反斜杠。

仍然想发布这个问题,因为我确定其他人将来会遇到类似的问题。

更有趣的是,这可以通过使用双反斜杠来实现...... \\在这个论坛上是必要的......显然,windows会以同样的方式对待它们(ish)。

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

"..\filename"

使用它:

"..\\filename"

或者这个:

"../filename"