Mock UpdateResult from UpdateOne using Go Mongo-Driver and mtest

王林
Release: 2024-02-09 20:00:33
forward
599 people have browsed it

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

php editor Baicao will introduce in this article how to use Go Mongo-Driver and mtest to simulate UpdateResult from UpdateOne. Through this method, we can simulate the UpdateResult object in the test environment and perform various operations and verification on it. This technology helps developers better test and debug their code, ensuring its stability and reliability in production environments. This article will introduce in detail the steps and sample code for using Go Mongo-Driver and mtest to help readers get started quickly and apply it to actual projects. Let’s explore together!

Question content

I'm trying to use themtestpackage (https://pkg.go.dev/go.mongodb.org/mongo-driver/mongo/integration /mtest) to perform some mock result testing on my mongodb calls, but I can't seem to figure out how to properly mock the*mongo.updateresult# returned when making anupdateone(...)call to a collection. ## value.

Here is a code snippet demonstrating the problem:

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") }) }
Copy after login

collection.updateone(context.background(), filter, update)The call works just fine. No errors are returned. Unfortunately, theupdateresult.modifiedcountvalue is always 0.

I tried various combinations of

mtest.createsuccessresponse(...)andandbson.d, usingnmodifiedandNames like n(as shown in the code snippet), as well asmodifiedcountandmatchedcountphp cnendcphpcn.cn nothing seems to fix the problem.

Is there a way to simulate this call so that it actually returns a value ofmodifiedcount?

Solution

mt.AddMockResponses(bson.D{ {"ok", 1}, {"nModified", 1}, })
Copy after login
This worked for me to get modifiedcount: 1

The above is the detailed content of Mock UpdateResult from UpdateOne using Go Mongo-Driver and mtest. For more information, please follow other related articles on the PHP Chinese website!

source:stackoverflow.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!