【问题标题】:VS Unit Testing can't open database (sqlite3)VS单元测试无法打开数据库(sqlite3)
【发布时间】:2018-05-02 04:30:09
【问题描述】:

我正在使用带有单元测试的 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 。不要认为这特别相关。

我这样调用函数:

import_materials_from_db("materials.db");

这在主应用程序中效果很好,但是一旦我在单元测试中尝试它:

import_materials_from_db("test_database.db");

我没有运气。

项目目录:

Advanced_Task_1\

单元测试目录:

Advanced_Task_1\UnitTest1\

为了以防万一,我已经尝试将数据库文件放在每个目录中。 我试过传递“..\test_database.db”等等等等。 最后,值得一提的是,我确信这是正确的文件名,并且我确信数据库中有信息可供读取。还是没有运气。

关于我到底做错了什么有什么想法吗?我尝试了“查看上面的目录”技巧,就像我在项目设置“..\”中所做的那样,但它也不喜欢那样。

【问题讨论】:

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


    【解决方案1】:

    我实际上是在写问题的时候发现了答案。

    为了确定,我尝试插入整个路径。

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

    这会产生错误“格式错误的通用字符名称”。

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

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

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

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

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


    更有趣的是,这可以使用双反斜杠实现... \\ 就像这个论坛所必需的... 显然 windows 以相同的方式对待它们(ish)。

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

    "..\filename"
    

    使用这个:

    "..\\filename"
    

    或者这个:

    "../filename"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-01
      • 2011-07-24
      • 2011-06-05
      • 1970-01-01
      • 2023-03-22
      相关资源
      最近更新 更多