【发布时间】:2021-07-24 13:48:46
【问题描述】:
我已经为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 接口生成一个模拟并依赖注入该模拟。
但是,现在我想为DockerClient 包装器的实际实现编写测试。 docker 包似乎没有为 ApiClient 提供模拟。当我需要使用的包不提供模拟时,是否有用于编写测试的规范模式?有没有办法让mockery 为库接口生成模拟?
【问题讨论】:
标签: docker unit-testing go