Heim >Backend-Entwicklung >Golang >Mock UpdateResult von UpdateOne mit Go Mongo-Driver und mtest
php-Editor Baicao stellt in diesem Artikel vor, wie man Go Mongo-Driver und mtest verwendet, um UpdateResult von UpdateOne zu simulieren. Mit dieser Methode können wir das UpdateResult-Objekt in der Testumgebung simulieren und verschiedene Vorgänge und Überprüfungen daran durchführen. Diese Technologie hilft Entwicklern, ihren Code besser zu testen und zu debuggen und sorgt so für Stabilität und Zuverlässigkeit in Produktionsumgebungen. In diesem Artikel werden die Schritte und der Beispielcode für die Verwendung von Go Mongo-Driver und mtest im Detail vorgestellt, um den Lesern den schnellen Einstieg zu erleichtern und ihn auf tatsächliche Projekte anzuwenden. Lasst uns gemeinsam erkunden!
Ich versuche, den mtest
包(https://pkg.go.dev/go.mongodb.org/mongo-driver/mongo/integration/mtest)对我的 mongodb 调用执行一些模拟结果测试,但我似乎无法弄清楚如何正确模拟对集合进行 updateone(...)
调用时返回的 *mongo.updateresult
-Wert zu verwenden.
Hier ist ein Codeausschnitt, der das Problem veranschaulicht:
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
Wert ist immer 0.
Ich habe mtest.createsuccessresponse(...)
和 和 bson.d 的多种组合,使用 nmodified
和 n
(如代码片段中所示)等名称,以及 modifiedcount
und matchedcountphp cnendcphpcn.cn ausprobiert und nichts scheint das Problem zu beheben. 94b3e26ee717c64999d7867364b1b4a3
e388a4556c0f65e1904146cc1a846beeGibt es eine Möglichkeit, diesen Aufruf so zu simulieren, dass er tatsächlich den Wert von <code>modifiedcount
modifiedcount zurückgibt?
mt.AddMockResponses(bson.D{ {"ok", 1}, {"nModified", 1}, })
Das hat bei mir funktioniert, um die modifizierte Anzahl zu erhalten: 1
Das obige ist der detaillierte Inhalt vonMock UpdateResult von UpdateOne mit Go Mongo-Driver und mtest. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!