Golang中如何mock Docker ApiClient以测试自定义封装实现?
我已经为Docker ApiClient实现了一个封装,核心结构定义如下:
type DockerClient struct { cli client.APIClient }
我还定义了专门用于和Docker交互的自定义接口,代码如下:
type Dockerer interface { Init() error CreateContainer(ctx context.Context, imageName string) (string, error) RunCommand(ctx context.Context, containerId string, command string) (string, int, error) StopContainer(ctx context.Context, containerId string) error }
DockerClient 实现了 Dockerer 接口约定的全部方法,代码骨架如下:
func (d *DockerClient) Init() error { // 初始化逻辑 } func (d *DockerClient) CreateContainer(ctx context.Context, imageName string) (string, error) { // 容器创建逻辑 } func (d *DockerClient) RunCommand(ctx context.Context, containerId string, command string) (string, int, error) { // 容器内命令执行逻辑 } func (d *DockerClient) StopContainer(ctx context.Context, containerId string) error { // 容器停止逻辑 }
这种设计可以大幅降低项目内Docker交互逻辑的测试成本:只需为自定义的 Dockerer 接口生成mock实现,再通过依赖注入的方式替换真实实现,就可以完成下游组件的测试。
目前遇到的测试问题是:需要为 DockerClient 封装本身的实际逻辑编写单元测试时,发现Docker官方包没有提供 ApiClient 的mock实现。想了解两个问题:
- 当依赖的第三方包未提供现成mock时,有没有通用的标准测试模式可以参考?
- 有没有办法让mockery这类mock生成工具,直接为第三方库的公开接口生成可用的mock实现?
内容的提问来源于stack exchange,提问作者Paymahn Moghadasian
相关产品推荐
相关产品推荐

