Maison > développement back-end > Golang > le corps du texte

Mock UpdateResult de UpdateOne en utilisant Go Mongo-Driver et mtest

王林
Libérer: 2024-02-09 20:00:33
avant
611 Les gens l'ont consulté

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

L'éditeur php Baicao présentera dans cet article comment utiliser Go Mongo-Driver et mtest pour simuler UpdateResult depuis UpdateOne. Grâce à cette méthode, nous pouvons simuler l'objet UpdateResult dans l'environnement de test et y effectuer diverses opérations et vérifications. Cette technologie aide les développeurs à mieux tester et déboguer leur code, garantissant ainsi sa stabilité et sa fiabilité dans les environnements de production. Cet article présentera en détail les étapes et un exemple de code pour utiliser Go Mongo-Driver et mtest pour aider les lecteurs à démarrer rapidement et à l'appliquer à des projets réels. Explorons ensemble !

Contenu de la question

J'essaie d'utiliser la valeur mtest 包(https://pkg.go.dev/go.mongodb.org/mongo-driver/mongo/integration/mtest)对我的 mongodb 调用执行一些模拟结果测试,但我似乎无法弄清楚如何正确模拟对集合进行 updateone(...) 调用时返回的 *mongo.updateresult.

Voici un extrait de code illustrant le problème :

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")
    })
}
Copier après la connexion

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

J'ai essayé mtest.createsuccessresponse(...) 和 和 bson.d 的多种组合,使用 nmodifiedn (如代码片段中所示)等名称,以及 modifiedcount et matchedcountphp cnendcphpcn.cn et rien ne semble résoudre le problème. </p> <p>Existe-t-il un moyen de simuler cet appel afin qu'il renvoie réellement la valeur de <code>modifiedcountmodifiedcount ?

Solution

mt.AddMockResponses(bson.D{
            {"ok", 1},
            {"nModified", 1},
        })
Copier après la connexion

Cela a fonctionné pour moi de modifier le nombre : 1

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!