0

我想测试一个数据库查询。为此,我尝试使用 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

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

4

1 回答 1

0

好的,所以我不得不打电话db.Begin()

于 2020-12-08T19:35:48.440 回答