首頁 > 後端開發 > Golang > 使用 Go Mongo-Driver 和 mtest 從 UpdateOne 模擬 UpdateResult

使用 Go Mongo-Driver 和 mtest 從 UpdateOne 模擬 UpdateResult

王林
發布: 2024-02-09 20:00:33
轉載
671 人瀏覽過

使用 Go Mongo-Driver 和 mtest 从 UpdateOne 模拟 UpdateResult

php小編百草在這篇文章中將介紹如何使用Go Mongo-Driver和mtest從UpdateOne模擬UpdateResult。透過這種方法,我們可以在測試環境中模擬UpdateResult對象,並對其進行各種操作和驗證。這種技術可以幫助開發人員更好地測試和調試他們的程式碼,確保其在生產環境中的穩定性和可靠性。本文將詳細介紹使用Go Mongo-Driver和mtest的步驟和範例程式碼,幫助讀者快速上手並應用於實際專案中。讓我們一起來探索吧!

問題內容

我正在嘗試使用mtest 套件(https://pkg.go.dev/go.mongodb.org/mongo-driver/mongo/integration /mtest)對我的mongodb 呼叫執行一些模擬結果測試,但我似乎無法弄清楚如何正確模擬對集合進行updateone(...) 呼叫時返回的*mongo.updateresult 值。

這是示範該問題的程式碼片段:

package test

import (
    "context"
    "errors"
    "testing"

    "github.com/stretchr/testify/assert"
    "go.mongodb.org/mongo-driver/bson"
    "go.mongodb.org/mongo-driver/mongo"
    "go.mongodb.org/mongo-driver/mongo/integration/mtest"
)

func UpdateOneCall(mongoClient *mongo.Client) error {
    filter := bson.D{{Key: "SomeIDField", Value: "SomeID"}}
    update := bson.D{{Key: "$set", Value: bson.D{{Key: "ANewField", Value: true}}}}
    collection := mongoClient.Database("SomeDatabase").Collection("SomeCollection")
    updateResult, err := collection.UpdateOne(context.Background(), filter, update)
    if err != nil {
        return err
    }
    if updateResult.ModifiedCount != 1 {
        return errors.New("no field was updated")
    }
    return nil
}

func TestUpdateOneCall(t *testing.T) {
    mt := mtest.New(t, mtest.NewOptions().ClientType(mtest.Mock))
    defer mt.Close()

    mt.Run("Successful Update", func(mt *mtest.T) {

        mt.AddMockResponses(mtest.CreateSuccessResponse(
            bson.E{Key: "NModified", Value: 1},
            bson.E{Key: "N", Value: 1},
        ))

        err := UpdateOneCall(mt.Client)

        assert.Nil(t, err, "Should have successfully triggered update")
    })
}
登入後複製

collection.updateone(context.background(), filter, update) 呼叫運作得很好。沒有回傳任何錯誤。不幸的是,updateresult.modifiedcount 值始終為 0。

我嘗試了mtest.createsuccessresponse(...) 和 和bson.d 的多種組合,使用nmodified n(如程式碼片段所示)等名稱,以及modifiedcount matchedcountphp cnendcphpcn.cn似乎沒有什麼可以解決問題。 </p> <p>是否有辦法模擬此調用,使其實際上返回 <code>modifiedcount 的值?

解決方法

mt.AddMockResponses(bson.D{
            {"ok", 1},
            {"nModified", 1},
        })
登入後複製

這對我獲得 modifiedcount 有用:1

以上是使用 Go Mongo-Driver 和 mtest 從 UpdateOne 模擬 UpdateResult的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板