猿问

预计不会调用查询 [...]

我想测试一个数据库查询。为此,我尝试使用 sqlmock 库。可悲的是我没有找到解决方案


我的测试是


    t.Run("call database", func(t *testing.T) {

        db, mock, err := sqlmock.New()

        if err != nil {

            t.Fatalf("an error '%s' was not expected when opening a stub database connection", err)

        }

        defer db.Close()

        var picArray []string

        technique := "ballpoint"


        mock.ExpectBegin()

        mock.ExpectQuery("SELECT * FROM pictures")


        wanted := picture.Picture{"hurr", "durr", 2020, "hurrdurr"}

        got := GetPicture(db, technique)

        if got != wanted {

            t.Errorf("got %q, wanted %q", got, picArray)

        }

    })

}

我的代码看起来像这样



func GetPicture(db *sql.DB, style string) picture.Picture {

    rows, err := db.Query("SELECT * FROM pictures")

    if err != nil {

        log.Fatal(err)

    }


    defer rows.Close()

    var (

        name      string

        technique string

        year      int

        fileName  string

    )

    pic := picture.Picture{}

    for rows.Next() {

        err := rows.Scan(&name, &technique, &year, &fileName)

        if err != nil {

            log.Fatal(err)

        }

        log.Println(name, technique, year, fileName)

        pic.Name = name

        pic.Technique = technique

        pic.Year = year

        pic.FileName = fileName

    }

    err = rows.Err()

    if err != nil {

        log.Fatal(err)

    }


    return pic

}

如果我运行测试,我会收到以下错误


2020/12/07 20:23:46 call to Query 'SELECT * FROM pictures' with args [], was not expected, next expectation is: ExpectedBegin => expecting database transaction Begin

exit status 1

如果调用了查询,我该如何检查?


墨色风雨
浏览 175回答 1
1回答

大话西游666

好的,所以我不得不打电话db.Begin()。
随时随地看视频慕课网APP

相关分类

Go
我要回答