Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mock UpdateResult daripada UpdateOne menggunakan Go Mongo-Driver dan mtest

Mock UpdateResult daripada UpdateOne menggunakan Go Mongo-Driver dan mtest

王林
王林ke hadapan
2024-02-09 20:00:33612semak imbas

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

editor php Baicao akan memperkenalkan dalam artikel ini cara menggunakan Go Mongo-Driver dan mtest untuk mensimulasikan UpdateResult daripada UpdateOne. Melalui kaedah ini, kami boleh mensimulasikan objek UpdateResult dalam persekitaran ujian dan melakukan pelbagai operasi dan pengesahan padanya. Teknologi ini membantu pembangun menguji dan menyahpepijat kod mereka dengan lebih baik, memastikan kestabilan dan kebolehpercayaannya dalam persekitaran pengeluaran. Artikel ini akan memperkenalkan secara terperinci langkah dan kod sampel untuk menggunakan Go Mongo-Driver dan mtest untuk membantu pembaca bermula dengan cepat dan menggunakannya pada projek sebenar. Mari kita meneroka bersama-sama!

Kandungan soalan

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

Berikut ialah coretan kod yang menunjukkan masalah:

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 nilai sentiasa 0.

Saya mencuba mtest.createsuccessresponse(...) 和 和 bson.d 的多种组合,使用 nmodifiedn (如代码片段中所示)等名称,以及 modifiedcount dan matchedcountphp cnendcphpcn.cn dan nampaknya tiada apa yang dapat menyelesaikan masalah. 94b3e26ee717c64999d7867364b1b4a3 e388a4556c0f65e1904146cc1a846beeAdakah terdapat cara untuk mensimulasikan panggilan ini supaya ia benar-benar mengembalikan nilai <code>modifiedcountmodifiedcount?

Penyelesaian

mt.AddMockResponses(bson.D{
            {"ok", 1},
            {"nModified", 1},
        })

Ini berjaya untuk saya mendapat modifiedcount: 1

Atas ialah kandungan terperinci Mock UpdateResult daripada UpdateOne menggunakan Go Mongo-Driver dan mtest. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam