如何在Go中模拟redis连接

如何在Go中模拟redis连接,go,redis,mocking,Go,Redis,Mocking,我正在使用包进行Redis DB调用。对于单元测试,我想模拟这个调用,有没有模拟库或方法 谢谢大家的回复。我发现这个包对于redis Mock非常有用 正如@Motakjuq所说,创建这样的界面 type DB interface { GetData(key string) (value string, error) SetData(key string, value string) error } 并在您的代码和测试中使用实际的redis客户端(如)实现它。模拟使用比乍一看更容易

我正在使用包进行Redis DB调用。对于单元测试,我想模拟这个调用,有没有模拟库或方法

谢谢大家的回复。我发现这个包对于redis Mock非常有用

正如@Motakjuq所说,创建这样的界面

type DB interface {
   GetData(key string) (value string, error)
   SetData(key string, value string) error
}

并在您的代码和测试中使用实际的redis客户端(如)实现它。

模拟使用比乍一看更容易。您不需要模拟Get、Set、ZAdd等每个函数。您只需启动miniredis并将其地址注入代码中使用的实际客户端(例如),方法如下:

mr := miniredis.Run()
redis.NewClient(&redis.Options{
            Addr: mr.Addr(),
        })

无需进一步模拟。这还使您能够无缝地使用
Pipelined()
TxPipelined()
等,即使miniredis没有明确公开这些方法。

您可以使用从redis使用的所有方法创建一个接口,并使用该接口而不是redis引用。这样,您就可以创建一个遵循接口规范的结构,并在方法中使用它