我是Golang的新手,在学习语言的同时一直采用TDD方法。我一直在相处,但我发现测试第三方软件包相当笨拙,这使我相信我一直在采取错误的做法。在Golang测试/嘲笑第三方软件包
我在与被嘲讽一个Redis client进行错误处理故障的具体情况。我采取的方法是创建我自己的接口,实现包装我想要使用的客户端方法。
type Redis interface {
Get(key string) (string, error)
}
type RedisClient struct {
client *redis.Client
}
func (redisClient *RedisClient) New(client *redis.Client) *RedisClient {
redisClient.client = client
return redisClient
}
func (redisClient *RedisClient) Get(key string) (string, error) {
return redisClient.client.Get(key).Result()
}
然后我就可以创建一个实现了相同的接口返回我指定的任何值,特别是对于测试错误处理模拟。
我已经打了一个路障,其中在客户端上perform transactions(MULTI)的特定方法返回属于该包装的另一个接口。我会在这种情况下做什么?自己实现这个接口似乎是不可能的。同样,随着此客户端的使用增长,我自己的实现可能会增长到它实现Redis的整个接口 - 这似乎违背了将此委托给外部依赖项的整个想法。
有没有更好的方式来测试像这样的第三方软件包,用于诸如错误处理之类的事情?
为什么它似乎出了问题你?我认为声明一个由'redis.Pipeline'实现的新接口并且让你的'RedisClient.TxPipeline'方法返回该接口而不是'redis.Pipeline'是完全正确的。 – mkopriva
你最终得出了什么结论?我有一个类似的困境。 – Lansana
@Lansana我的方法基本如下,集成测试涵盖与任何依赖关系的交互。对于非Redis特定的内容,或任何无法通过集成测试进行测试的内容,mkopriva的建议也适用。 – cejast