如何在golang中模拟Zookeeper服务器进行单元测试?

时间:2017-02-07 17:53:59

标签: unit-testing go apache-zookeeper

我使用库gozk将我的应用程序与生产zookeeper服务器连接起来。我想测试应用程序是否创建了正确的节点,它们包含各种情况的正确内容,以及DataWatch和NodeWatch设置正确:

应用程序执行的应该基于节点和数据更新。

我是否可以在单元测试期间创建和销毁模拟zookeeper服务器,具有人为创建新节点和设置节点内容的能力? 是否有不同于手动创建zookeeper服务器并使用它的方法?

java

已存在解决方案

2 个答案:

答案 0 :(得分:2)

我建议你将调用zookeeper的代码变成一个接口。

然后在测试期间,你在'mockZookeeperConn'对象中进行子操作,该对象只返回值,就像它真正连接到服务器一样(但返回值是硬编码的)

答案 1 :(得分:0)

@Ben Echols的答案非常好。

此外,您可以尝试" build constraints"。

您可以在real-zk和mock-zk代码上配置不同的构建标记。

例如,我们配置"产品"对于真实的zk代码和" mock"对于mock-zk代码。

因此,有两种方法可以运行单元测试:

  • go test -tags mock如果没有zk env。
  • go test -tags product如果有可用的zk env。