ホームページ >バックエンド開発 >Golang >Go Mongo-Driver と mtest を使用して UpdateOne からの UpdateResult をモックする

Go Mongo-Driver と mtest を使用して UpdateOne からの UpdateResult をモックする

王林
王林転載
2024-02-09 20:00:33662ブラウズ

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

php エディター Baicao は、この記事で Go Mongo-Driver と mtest を使用して UpdateOne からの UpdateResult をシミュレートする方法を紹介します。このメソッドを通じて、テスト環境で UpdateResult オブジェクトをシミュレートし、それに対してさまざまな操作と検証を実行できます。このテクノロジーは、開発者がコードのテストとデバッグをより適切に行い、実稼働環境での安定性と信頼性を確保するのに役立ちます。この記事では、読者がすぐに始めて実際のプロジェクトに適用できるように、Go Mongo-Driver と mtest を使用する手順とサンプル コードを詳しく紹介します。一緒に探検しましょう!

質問内容

mtest パッケージ (https://pkg.go.dev/go.mongodb.org/mongo-driver/) を使用しようとしていますmongo/integration /mtest) を使用して、mongodb 呼び出しでモック結果テストを実行しますが、updateone(.. .) コレクションへの呼び出し ## 値。 問題を示すコード スニペットは次のとおりです:

リーリー

collection.updateone(context.background(), filter, update)

呼び出しは正常に機能します。エラーは返されません。残念ながら、updateresult.modifiedcount の値は常に 0 です。 私は、

nmodified

のような名前を使用して、mtest.createsuccessresponse(...) と と bson.d のさまざまな組み合わせを試しました。 n (コード スニペットに示されているように)、modifiedcount および matchedcountphp cnendcphpcn.cn を実行しても問題は解決しないようです。 94b3e26ee717c64999d7867364b1b4a3 e388a4556c0f65e1904146cc1a846bee実際に modifiedcount の値を返すようにこの呼び出しをシミュレートする方法はありますか? <code>解決策

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

これで、modifiedcount: 1

を取得できました。

以上がGo Mongo-Driver と mtest を使用して UpdateOne からの UpdateResult をモックするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。