1 回答

TA贡献1856条经验 获得超11个赞
您不应该传递对该s3.S3结构的引用。使用适用于 Go v1 的 AWS 开发工具包时,您通常会传递相应的服务接口。对于 S3,这是s3iface。
您的函数签名如下所示:
func (l *listContentImp) ListS3Content(client s3iface.S3API) (bool, error)
现在,您传递的每个实现至少一种方法的结构s3iface.S3API都将起作用。
在运行时,您将传递适当的服务客户端,但在单元测试中,您可以只传递一个模拟:
type mock struct {
s3iface.S3API
output *s3.ListObjectsV2Output
err error
}
func (m mock) ListObjectsV2(*s3.ListObjectsV2Input) (*s3.ListObjectsV2Output, error) {
return m.output, m.err
}
在您的测试中,您创建模拟并将其传递给您的函数:
func Test_ListObject(t *testing.T) {
l := &listContentImp{...}
m := mock{
output: &s3.ListObjectsV2Output{...},
err: nil
}
result, err := l.ListS3Content(m)
[... add checks here...]
}
- 1 回答
- 0 关注
- 101 浏览
添加回答
举报