返回顶部
首页 > 资讯 > 后端开发 > GO >使用 Go 编写模拟 MongoDB 的响应
  • 402
分享到

使用 Go 编写模拟 MongoDB 的响应

2024-04-04 23:04:57 402人浏览 独家记忆
摘要

小伙伴们对golang编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《使用 Go 编写模拟 mongoDB 的响应》,就很适合你,本篇文章讲解的知识点主要包括。在之后的文章中也会多多分享相关

小伙伴们对golang编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《使用 Go 编写模拟 mongoDB 的响应》,就很适合你,本篇文章讲解的知识点主要包括。在之后的文章中也会多多分享相关知识点,希望对大家的知识积累有所帮助!

问题内容

我正在从 mongodb 获取文档并将其传递给函数 transfORM,例如

var doc map[string]interface{}
err := collection.findone(context.todo(), filter).decode(&doc) 
result := transform(doc)

我想为 transform 编写单元测试,但我不确定如何模拟来自 mongodb 的响应。理想情况下,我想设置这样的东西:

func TestTransform(t *testing.T) {
    byt := []byte(`
    {"hello": "world",
     "message": "apple"}
 `)

    var doc map[string]interface{}

    >>> Some method here to Decode byt into doc like the code above <<<

    out := transform(doc)
    expected := ...
    if diff := deep.Equal(expected, out); diff != nil {
        t.Error(diff)
    }
}

一种方法是将 JSON.unmarshal 转换为 doc,但这有时会产生不同的结果。例如,如果 mongodb 中的文档中有一个数组,则该数组将被解码为 doc 作为 bson.a 类型,而不是 []interface{} 类型。


解决方案


我团队的一名成员最近发现go的官方mongodb驱动程序中有一个隐藏的宝石:https://pkg.go.dev/go.mongodb.org/[email protected]/mongo/integration/mtest。虽然该包处于实验模式并且不保证向后兼容性,但它可以帮助您执行单元测试,至少使用此版本的驱动程序。

您可以查看这篇很酷的文章,其中有大量有关如何使用它的示例:Https://medium.com/@victor.neuret/mocking-the-official-mongo-golang-driver-5aad5b226a78。此外,这里是包含本文代码示例的存储库:https://GitHub.com/victorneuret/mongo-go-driver-mock。

因此,根据您的示例和文章中的示例,我认为您可以尝试以下操作(当然,您可能需要对此进行调整和实验):

func TestTransform(t *testing.T) {
    mt := mtest.New(t, mtest.NewOptions().ClientType(mtest.Mock))
    defer mt.Close()

    mt.Run("find & transform", func(mt *mtest.T) {
        myollection = mt.Coll
        expected := myStructure{...}

        mt.AddMockResponses(mtest.CreateCursorResponse(1, "foo.bar", mtest.FirstBatch, bson.D{
            {"_id", expected.ID},
            {"field-1", expected.Field1},
            {"field-2", expected.Field2},
        }))

        response, err := myFindFunction(expected.ID)
        if err != nil {
            t.Error(err)
        }

        out := transform(response)
        if diff := deep.Equal(expected, out); diff != nil {
            t.Error(diff)
        }
    })
}

或者,您可以通过与 Docker 容器的集成测试以自动化的方式执行更真实的测试。有一些很好的软件包可以帮助您做到这一点:

  • https://github.com/ory/dockertest
  • https://github.com/testcontainers/testcontainers-go

我采用了 dockertest 库的这种方法,通过 go test -v -run integration 命令来自动化完整的集成测试环境,该环境可以是 setupteardown 。请参阅此处的完整示例:https://github.com/AnhellO/learn-dockertest/tree/master/mongo。

希望这有帮助。

终于介绍完啦!小伙伴们,这篇关于《使用 Go 编写模拟 MongoDB 的响应》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~编程网公众号也会发布Golang相关知识,快来关注吧!

您可能感兴趣的文档:

--结束END--

本文标题: 使用 Go 编写模拟 MongoDB 的响应

本文链接: https://lsjlt.com/news/595897.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 使用 Go 编写模拟 MongoDB 的响应
    小伙伴们对Golang编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《使用 Go 编写模拟 MongoDB 的响应》,就很适合你,本篇文章讲解的知识点主要包括。在之后的文章中也会多多分享相关...
    99+
    2024-04-04
  • 如何使用Go语言编写高效的Apache响应程序?
    Go语言是一种高效的编程语言,它在编写高性能网络应用程序方面具有出色的表现。Apache是一种流行的Web服务器,使用Go语言编写高效的Apache响应程序可以提高Web服务器的性能和响应速度。在本文中,我们将介绍如何使用Go语言编写高效的...
    99+
    2023-11-09
    linux apache 响应
  • 如何使用搜索到的数据编写响应 - go-swagger & gorm
    欢迎各位小伙伴来到编程网,相聚于此都是缘哈哈哈!今天我给大家带来《如何使用搜索到的数据编写响应 - go-swagger & gorm》,这篇文章主要讲到等等知识,如果你对Golang相关的知识非常...
    99+
    2024-04-05
  • 使用模拟编写单元测试
    本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《使用模拟编写单元测试》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~问题内容我在里面写了一个rest a...
    99+
    2024-04-04
  • 如何使用Go编写一个高效的响应日志系统?
    日志是我们在开发过程中不可或缺的一部分,它可以帮助我们监控程序运行情况,及时发现问题并进行调试。而对于一个高流量的应用,如何高效地记录日志也是一件非常重要的事情。本文将介绍如何使用Go编写一个高效的响应日志系统,以满足高流量应用的需求。 ...
    99+
    2023-07-21
    编程算法 响应 日志
  • 如何使用Go编写异步API并提高响应速度?
    在现代的应用程序中,API已经成为了互联网的基础设施之一。而异步API更是在大数据、高并发、高可用性等场景下被广泛应用。Go作为一种高性能的编程语言,可以帮助我们轻松地编写异步API,并提高响应速度。本文将介绍如何使用Go编写异步API,...
    99+
    2023-11-08
    异步编程 响应 api
  • 如何在LeetCode上使用Go语言编写高效的响应函数?
    LeetCode是一个广受欢迎的算法和数据结构学习平台,它提供了丰富的编程题目和一个在线编程环境,让我们可以练习和磨练自己的编程能力。而Go语言则是一门具有高效性和可靠性的编程语言,它在处理高并发和大规模数据时表现出色。本文将介绍如何在Le...
    99+
    2023-09-12
    响应 leetcode 函数
  • 用 Go 编写 Android 应用
    go可用于编写android应用程序,安装go后,需配置android开发环境(安装android sdk和ndk)。编写go android应用程序的步骤包括:创建新项目、编写主活动:...
    99+
    2024-04-08
    go android golang
  • Golang:使用 httptest 拦截和模拟 HTTP 响应
    php小编子墨为大家带来了一篇关于Golang中使用httptest拦截和模拟HTTP响应的文章。在这篇文章中,我们将深入探讨如何使用httptest包来进行HTTP请求的拦截和模拟响...
    99+
    2024-02-09
  • 如何使用Python和JavaScript编写可响应的函数?
    函数是编程中的基本概念,它是一段可重复使用的代码块,可以在程序中被调用多次。在Python和JavaScript中,函数也是非常重要的。本文将介绍如何使用Python和JavaScript编写可响应的函数,以及演示一些示例代码。 一、Py...
    99+
    2023-10-02
    javascript 函数 响应
  • 如何使用PHP编写出快速响应的算法?
    PHP是一种广泛使用的脚本语言,它可以用于快速开发各种应用程序。在编写PHP程序时,我们经常需要编写算法来处理数据或实现某些功能。但有些算法可能会耗费很长时间来执行,这会导致我们的应用程序响应速度较慢。因此,在这篇文章中,我们将介绍如何使用...
    99+
    2023-07-01
    编程算法 响应 索引
  • 如何使用Go语言编写实时的Spring应用?
    Go语言是一种非常流行的编程语言,它的出现为开发者提供了一种高效、简洁、可靠的编程方式。而Spring框架作为Java语言中最受欢迎的框架之一,也为Java开发者提供了一种高效的开发方式。那么如何使用Go语言编写实时的Spring应用呢?本...
    99+
    2023-11-10
    bash 实时 spring
  • 如何使用 PHP 数组编写高效的响应系统?
    PHP 数组是一种非常常用的数据类型,可以用来存储一组相关的数据。在编写高效的响应系统时,使用 PHP 数组可以让我们更加方便地处理数据,提高程序的效率。本文将介绍如何使用 PHP 数组编写高效的响应系统,并提供一些示例代码。 一、使用 P...
    99+
    2023-09-01
    数组 学习笔记 响应
  • 编程算法:如何使用PHP编写HTTP请求和响应?
    在现代互联网时代,HTTP请求和响应成为了不可或缺的一部分。PHP作为一种广泛应用的编程语言,也可以用于编写HTTP请求和响应。本文将介绍如何使用PHP编写HTTP请求和响应。 HTTP请求 HTTP请求是指浏览器或客户端向服务器发送的请...
    99+
    2023-06-16
    http 编程算法 编程算法
  • 用GO语言编写的日志索引器,如何提高响应速度?
    日志索引器是一种用于快速查找和分析大量日志数据的工具。在现代软件开发和运维中,日志数据是非常重要的,因为它可以帮助开发人员和运维人员快速定位和解决问题。而GO语言是近年来非常流行的编程语言,它具有高效、安全、并发等特点,因此,使用GO语言编...
    99+
    2023-07-02
    索引 日志 响应
  • 如何让Apache在Linux上更快地响应Go编写的程序?
    在Linux系统上,Apache作为一款常用的Web服务器,经常用于运行各种Web应用程序。而Go语言是一种以高效和并发著称的编程语言,因此,许多开发者选择使用Go编写Web应用程序。然而,为了让Apache在Linux上更快地响应Go编写...
    99+
    2023-11-09
    linux apache 响应
  • ASP Core 中的异步编程:编写响应迅速的 Web 应用程序
    异步编程的优势 在传统同步编程模型中,应用程序必须等待特定任务完成才能继续执行。这会导致应用程序出现阻塞,从而降低响应速度。异步编程打破了这一限制,允许应用程序在等待任务完成时执行其他操作,从而显著提高并行性和响应能力。 ASP Cor...
    99+
    2024-03-07
    ASP Core、异步编程、响应速度、Task、Async/Await
  • 你有没有尝试过使用Go编写Apache模块?
    近年来,Go语言在编程界备受瞩目,因为它拥有强大的并发编程能力和简洁的语法,能够更好地应对现代网络应用的需求。而Apache服务器是目前使用最广泛的Web服务器之一,因此有很多人想要将两者结合起来使用。本文将会介绍如何使用Go编写Apach...
    99+
    2023-06-24
    bash apache unix
  • 想让你的API更快?试试用Go编写,再结合Apache优化响应!
    随着互联网的普及,API(Application Programming Interface)的使用越来越广泛。一个高效的API对于网站的性能至关重要。因此,编写一个高效的API成为了很多开发者的追求。那么,如何让你的API更快呢?本文将...
    99+
    2023-09-05
    apache 响应 api
  • 重用模型并从 Fiber/MongoDB 的响应中删除字段
    php小编子墨在这篇文章中将介绍如何在Fiber/MongoDB的响应中删除字段并重用模型。当我们从数据库中获取数据时,有时候我们需要删除一些字段,以满足特定的需求或者保护敏感信息。F...
    99+
    2024-02-08
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作