unit-testing - 无法在 golang : "unable to open database file [recovered]"-error 中打开 SQLite 数据库

标签 unit-testing go sqlite

我刚开始学习 golang,不确定我的错误是概念上的还是语言上的。

这很奇怪,因为只有在对我的代码进行单元测试时才会出现错误。如果我“去运行”一切正常。作为 sqlite 驱动程序,我使用 mattn/go-sqlite3 .

这里是问题发生的地方:

    func dbExec(command *string) {
    db, err := sql.Open("sqlite3", dbPath) // Path and driver are set correcrtly
    defer db.Close()
    if err != nil { //No problem here
        panic(err)
    }
    _, err = db.Exec(*command)
    if err != nil { //Here the errorNo14 "Unable to open the database file" occurs
        panic(err)
    }
 }

所以在我看来,可以找到数据库文件,但由于其他限制无法打开。我的所有代码都没有并发性。到目前为止我只有一种测试方法,所以即使测试是同时进行的,到目前为止也只有一个线程。也许有人有想法!这个问题似乎很基本,我的代码真的没有比这个更多的了。

最佳答案

sql.Open 通常不执行任何数据库操作,它只是初始化驱动程序(详见 sql.Open docs)。在后台调用驱动程序的 Open() 方法。

这意味着第一个错误通常是在尝试执行操作时遇到的,在您的例子中是:db.Exec

至于实际错误:如果这是在测试中,则可能是您的路径不正确(例如:如果测试数据库位于测试的子目录中,我认为测试运行器的当前目录会有所不同) .尝试切换到绝对路径(或在运行时计算的路径)。

还有一个小问题:在第一次错误检查之后移动 defer db.Close()

关于unit-testing - 无法在 golang : "unable to open database file [recovered]"-error 中打开 SQLite 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47744451/

相关文章:

sqlite - 允许 PHP PDO/Apache 访问/var/www 中的 SQLite 数据库所需的最低权限

java - 单元测试中的模拟域实体

java - 如何模拟存在但无法读取的路径

angular - Jasmine : How to SpyOn a method callback : method. then()

go - 为什么errorString是一个结构,而不是一个字符串

Golang mux 路由器处理程序函数参数

performance - 在不同的线程(QT)上同时打开多个 SQLite 数据库实例

javascript - 将 HTML 附加到 Javascript Fireunit 测试

go - 链代码示例中没有可构建的 Go 源文件错误

ruby-on-rails - 这个 Rails 文件存储在哪里?数据库/开发.sqlite3