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

Mock UpdateResult von UpdateOne mit Go Mongo-Driver und mtest

王林
王林nach vorne
2024-02-09 20:00:33662Durchsuche

使用 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")
    })
}

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. 94b3e26ee717c64999d7867364b1b4a3 e388a4556c0f65e1904146cc1a846beeGibt 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},
        })

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen