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似乎沒有什麼可以解決問題。 94b3e26ee717c64999d7867364b1b4a3
e388a4556c0f65e1904146cc1a846bee是否有辦法模擬此調用,使其實際上返回 <code>modifiedcount
的值?
mt.AddMockResponses(bson.D{ {"ok", 1}, {"nModified", 1}, })
這對我獲得 modifiedcount 有用:1
以上是使用 Go Mongo-Driver 和 mtest 從 UpdateOne 模擬 UpdateResult的詳細內容。更多資訊請關注PHP中文網其他相關文章!