amazon-web-services - 如何在golang中模拟request.Request

标签 amazon-web-services go request mocking

我正在使用 github.com/aws/aws-sdk-go/aws/request 来获取预签名 URL,我需要将其上传到 AWS 中的 s3 存储桶。我目前正在编写测试,因此我需要模拟 func (r *Request) Presign(expire time.Duration) 。 request.Request 是一个结构,而不是一个接口(interface),所以我不知道如何模拟它。

最佳答案

这并没有直接回答您的问题,但它可能会完全消除问题的基础。

Go 中的一个巧妙之处是,您可以使用接口(interface)轻松隔离依赖项。如果您的代码(需要测试的部分)间接使用 Presign,则测试起来很简单。

即创建一个界面

type HigherLevelAws interface {
    Upload(file string) error
}

并在代码中使用此接口(interface)以及上传。然后你可以使用例如轻松地模拟它https://godoc.org/github.com/stretchr/testify/mock

实际的实现,看起来像这样

type ActualAwsImpl struct {
    aws *aws.Client
}

func (a *ActualAwsImpl) Upload(file string) error {
    aws.Presign...
}

这允许您测试代码的业务部分,但当然,仍然会在 ActualAwsImpl 中留下未经测试的代码。然而,这些未经测试的代码可以通过 aws sdk 本身中的单元和集成测试来保证正常工作。 不管怎样,在我的组织中,我们使用在 docker 中运行的假 aws 服务来测试这一点(例如 https://github.com/gliffy/fake-s3 )。

关于amazon-web-services - 如何在golang中模拟request.Request,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54285068/

相关文章:

linux - ELK堆栈和Web应用程序位于不同的服务器上,如何从后到前提供日志?

amazon-web-services - 使用策略限制亚马逊 s3 存储桶上的文件类型

javascript - Node - Request.js ECONNRESET 错误仅在服务器上

Javascript 全局变量未在回调中修改

node.js - NODE JS - 在建立安全 TLS 连接之前客户端网络套接字断开连接

ssl - 在 Go 中使用 SSL 终止和 HTTP/2 的 HAProxy

google-app-engine - 仅对我的一个模块有很长的延迟

bash - 如何使用Bash自动执行两个OS.Stdin输入

javascript - 将 Node 请求或 axios 与流一起使用来下载和解压缩文件未按预期处理背压?

c# - Request.UserHostAddress 返回负载均衡器的 IP 地址