第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

調(diào)用回滾事務(wù),不是預(yù)期的,下一個(gè)預(yù)期是:ExpectedQuery

調(diào)用回滾事務(wù),不是預(yù)期的,下一個(gè)預(yù)期是:ExpectedQuery

Go
慕尼黑5688855 2023-01-03 09:46:43
我正在嘗試在下面編寫這個(gè)測(cè)試,其他測(cè)試工作正常,但是我在UPDATE查詢時(shí)遇到問(wèn)題func TestDeleteWorkspace(t *testing.T) {    conn, mock, repository, err := setup()    defer conn.Close()    assert.NoError(t, err)    uid := uuid.New()    // mock.ExpectBegin()    mock.ExpectQuery(regexp.QuoteMeta(`UPDATE "workspaces" SET`)).WithArgs(sqlmock.AnyArg(), uid)    // mock.ExpectCommit()    var e bool    e, err = repository.Delete(uid)    assert.NoError(t, err)    assert.True(t, e)    err = mock.ExpectationsWereMet()    assert.NoError(t, err)}repository.Delete做這個(gè)查詢func (r *WorkspaceRepository) Delete(id any) (bool, error) {    if err := r.db.Delete(&model.Workspace{}, "id = ?", id).Error; err != nil {        return false, nil    }    return true, nil}哪個(gè)運(yùn)行此查詢UPDATE "workspaces" SET "deleted_at"='2022-07-04 09:09:20.778' WHERE id = 'c4610193-b43a-4ed7-9ed6-9d67b3f97502' AND "workspaces"."deleted_at" IS NULL我正在使用Soft-Delete,這就是為什么它是 UPDATE 而不是 DELETE 查詢但是,我收到以下錯(cuò)誤    workspace_test.go:169:                 Error Trace:    workspace_test.go:169                Error:          Received unexpected error:                                there is a remaining expectation which was not matched: ExpectedQuery => expecting Query, QueryContext or QueryRow which:                                  - matches sql: 'UPDATE "workspaces" SET'                                  - is with arguments:                                    0 - 28e7aa46-7a22-4dc7-b3ce-6cf02af525ca                                    1 - {}我做錯(cuò)了什么?
查看完整描述

1 回答

?
烙印99

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超13個(gè)贊

錯(cuò)誤消息是不言自明的。

這是您的查詢:

'UPDATE "workspaces" SET "deleted_at"=$1 WHERE id = $2 AND "workspaces"."deleted_at" IS NULL'

它包括 2 個(gè)參數(shù):

"deleted_at"=$1 WHERE id = $2

您在 SQL 模擬中僅設(shè)置 1 :

.WithArgs(uid)

您需要在模擬中發(fā)送兩個(gè)參數(shù)。

在測(cè)試中使用它是不可靠的,Time.Now()因?yàn)樵撝蹬紶枙?huì)與您在代碼中設(shè)置的值相差幾納秒,并且測(cè)試將失敗。

快速而骯臟的解決方法是使用sqlmock.AnyArg()

.WithArgs(sqlmock.AnyArg(), uid)

一個(gè)更復(fù)雜的替代方法是編寫Argument檢查類型并將值與time.Now(). 差異應(yīng)小于幾秒鐘。

看一個(gè)例子:https ://github.com/DATA-DOG/go-sqlmock#matching-arguments-like-timetime


查看完整回答
反對(duì) 回復(fù) 2023-01-03
  • 1 回答
  • 0 關(guān)注
  • 160 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)