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!
I'm trying to use themtest
package (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 an
updateone(...)call to a collection. ## value.
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)The call works just fine. No errors are returned. Unfortunately, the
updateresult.modifiedcountvalue is always 0.
mtest.createsuccessresponse(...)and
andbson.d, usingnmodifiedand
Names like n(as shown in the code snippet), as well as
modifiedcountand
matchedcountphp cnendcphpcn.cn nothing seems to fix the problem.
Is there a way to simulate this call so that it actually returns a value ofmodifiedcount
?
mt.AddMockResponses(bson.D{ {"ok", 1}, {"nModified", 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!