Heim > Backend-Entwicklung > Golang > Mock UpdateResult von UpdateOne mit Go Mongo-Driver und mtest

Mock UpdateResult von UpdateOne mit Go Mongo-Driver und mtest

王林
Freigeben: 2024-02-09 20:00:33
nach vorne
669 Leute haben es durchsucht

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

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!

Frageninhalt

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")
    })
}
Nach dem Login kopieren

collection.updateone(context.background(), filter, update) 调用工作得很好。没有返回任何错误。不幸的是,updateresult.modifiedcount Wert ist immer 0.

Ich habe mtest.createsuccessresponse(...) 和 和 bson.d 的多种组合,使用 nmodifiedn (如代码片段中所示)等名称,以及 modifiedcount und matchedcountphp cnendcphpcn.cn ausprobiert und nichts scheint das Problem zu beheben. </p> <p>Gibt es eine Möglichkeit, diesen Aufruf so zu simulieren, dass er tatsächlich den Wert von <code>modifiedcountmodifiedcount zurückgibt?

Lösung

mt.AddMockResponses(bson.D{
            {"ok", 1},
            {"nModified", 1},
        })
Nach dem Login kopieren

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!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage