簡體   English   中英

在 Go 中使用映射模擬選擇返回預期的事務開始錯誤

[英]Mocking a select with mapping in Go is returning expected transaction begin error

我正在嘗試使用 go-sqlmock 做一個簡單的單元測試來做一個選擇並返回一個映射的 ID。 下面的代碼片段

    s.sqlmock.ExpectBegin()
    s.sqlmock.
        ExpectQuery("select `id` from `project` where `id` = \\? and `archived` = \\1").
        WithArgs(2).
        WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(strconv.Itoa(1)))
    s.sqlmock.ExpectCommit()

我要測試的實現片段是:

...

    type Project struct{ Id int64 }

    var project Project

    tx.Raw("select id from project where id = ? and archived = 1", values["projectId"]).Scan(&project)

...

但是出現以下錯誤:

在此處輸入圖片說明

我試過一些例子,但沒有成功。 我感謝大家的幫助

更新


我試圖刪除s.sqlmock.ExpectBegin() and s.sqlmock.ExpectCommit()並更改如下查詢:

    s.sqlmock.
        ExpectQuery("select id from project where id = ? and archived = 1").
        WithArgs(2).
        WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(strconv.Itoa(1)))

但是出現以下錯誤:

查詢:無法匹配實際的 sql:“select id from project where id = ? and archived = 1”與預期的正則表達式“select id from project where id = ? and archived = 1”

好吧,用戶響應@mh-cbon 工作得很好。 我將默認匹配器替換為完全區分大小寫,並且測試通過了!

前:

    var sqlDB *sql.DB

    sqlDB, s.sqlmock, _ = sqlmock.New()
    s.db, _ = gorm.Open("mysql", sqlDB)

后:

    var sqlDB *sql.DB

    sqlDB, s.sqlmock, _ = sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual))
    s.db, _ = gorm.Open("mysql", sqlDB)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM