Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 无法从非根文件夹运行测试_Go - Fatal编程技术网

Go 无法从非根文件夹运行测试

Go 无法从非根文件夹运行测试,go,Go,我有一个测试,看起来像: package tst import ( "testing" "github.com/demas/cowl-go/pkg/postgres" "log" "os" "fmt" "github.com/jmoiron/sqlx" "github.com/demas/cowl-go/pkg/quzx-crawler" "github.com/SlyMarbo/rss" "time" _ "gi

我有一个测试,看起来像:

package tst

import (
    "testing"
    "github.com/demas/cowl-go/pkg/postgres"
    "log"
    "os"
    "fmt"
    "github.com/jmoiron/sqlx"
    "github.com/demas/cowl-go/pkg/quzx-crawler"
    "github.com/SlyMarbo/rss"
    "time"
    _ "github.com/lib/pq"
)

func TestMain(m *testing.M) {

    prepare()
    retCode := m.Run()
    os.Exit(retCode)
}

func prepare() {
    connectionString := fmt.Sprintf("user=%s password=%s host=%s port=%s dbname=%s sslmode=disable",
        os.Getenv("DBUSER"),
        os.Getenv("DBPASS"),
        os.Getenv("DBHOST"),
        os.Getenv("DBPORT"),
        os.Getenv("DBNAME"))

    db, err := sqlx.Open("postgres", connectionString)
    if err != nil {
        log.Fatal(err)
    }

    db.Exec(`DELETE FROM Settings`)
    db.Exec(`DELETE FROM HackerNews`)
    // ....
}
如果我将测试保存在根项目文件夹中,测试工作正常,但是如果我将它们移动到
tst
文件夹中,我会收到错误消息:

D:\development\gopath\src\github.com\demas\cowl-go\tst>go test -v
2017/03/31 16:30:06 sql: unknown driver "postgres" (forgotten import?)
exit status 1
FAIL    github.com/demas/cowl-go/tst    0.085s

为什么?

正如@JimB在评论中已经提到的,该错误意味着您正在尝试使用
sqlx.open
打开数据库连接,而无需先导入数据库驱动程序。在您的情况下,可以通过添加此导入规范来解决此问题

如果,即使在添加了导入之后,您仍然看到相同的错误,那么这意味着您的一个依赖项也在尝试在不首先导入必要的驱动程序的情况下打开db连接


请注意,虽然
log.Fatal
是一种很好且干净的停止程序的方法,但正如您已经知道的,它有时可能会缺失。你可能想考虑使用<代码>惊慌< /代码>,它的输出更混乱,但另一方面,你会得到引起恐慌的行号和文件名,最终你将学会快速解析它。

在评论中已经被@ jimb提到了,错误意味着你试图打开一个DB连接,使用
sqlx.Open
,无需首先导入db驱动程序。在您的情况下,可以通过添加此导入规范来解决此问题

如果,即使在添加了导入之后,您仍然看到相同的错误,那么这意味着您的一个依赖项也在尝试在不首先导入必要的驱动程序的情况下打开db连接


请注意,虽然
log.Fatal
是一种很好且干净的停止程序的方法,但正如您已经知道的,它有时可能会缺失。你可能想考虑使用<代码>惊慌,它的输出更加混乱,但另一方面,你会得到引起恐慌的行号和文件名,最终你将学会快速解析它。

错误是因为你没有导入SQL驱动程序。您是否打算使用“github.com/lib/pq”,或者“github.com/demas/cowl go/pkg/postgres”应该是一个驱动程序?我已经添加了
\uuu“github.com/lib/pq”
,但错误仍然存在。这些依赖项中是否有任何一个可能会尝试打开连接,而不首先导入
\uuu“github.com/lib/pq”
?在
init
func或func调用中设置全局
var
?@mkopriva,谢谢-这对我很有帮助。但是为什么它在项目根目录下工作得很好?@demas在不知道根文件夹工作时的内容的情况下,我很难说:)这个错误是因为您没有导入sql驱动程序。您是否打算使用“github.com/lib/pq”,或者“github.com/demas/cowl go/pkg/postgres”应该是一个驱动程序?我已经添加了
\uuu“github.com/lib/pq”
,但错误仍然存在。这些依赖项中是否有任何一个可能会尝试打开连接,而不首先导入
\uuu“github.com/lib/pq”
?在
init
func或func调用中设置全局
var
?@mkopriva,谢谢-这对我很有帮助。但是为什么它在项目的根目录下工作得很好?@demas在不知道根文件夹工作时的内容的情况下,我很难说:)