Maison  >  Article  >  développement back-end  >  Mock UpdateResult de UpdateOne en utilisant Go Mongo-Driver et mtest

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

王林
王林avant
2024-02-09 20:00:33612parcourir

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

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

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer