当前位置: 首页 > news >正文

Curator Framework如何写单元测试

概述

使用curator framework框架去操作zookeeper时,我们知道因其的方法风格是那种流式的编写风格,所以我们在写单元测试的时候要把链接zookeeper的操作给mock掉,那么着实是不太好写单测。不过好在curator framework有一个专门用于测试的模块,可以让我们在单测运行之前就在本地启动一个zookeeper server实例,以便于让单测可以直接连接本地的zookeeper实例创建curator client,便于做单元测试。

实现

引入依赖

            <dependency>
                <groupId>org.apache.curator</groupId>
                <artifactId>curator-framework</artifactId>
                <version>4.3.0</version>
            </dependency>
            <dependency>
                <groupId>org.apache.curator</groupId>
                <artifactId>curator-test</artifactId>
                <version>4.3.0</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.zookeeper</groupId>
                <artifactId>zookeeper</artifactId>
                <version>3.4.14</version>
            </dependency>

启动zookeeper

    private static TestingServer zkServer;

    @BeforeClass
    public static void startZkServer() throws Exception {
        zkServer = new TestingServer(true);
        zkServer.start();
    }

创建curator framework client

    private CuratorFramework zkClient;
    
    @BeforeAll
    public CuratorFramework createCuratorClient() {
        zkClient = CuratorFrameworkFactory.builder()
                //本地启动的zookeeper实例端口,跑单测用
                .connectString(zkServer.getConnectString())
                .retryPolicy(new RetryNTimes(5, 1000))
                .connectionTimeoutMs(40 * 1000)
                .sessionTimeoutMs(5 * 1000).build();

        zkClient.start();
    }

单元测试-创建临时节点

    @Test
    public void test_createEphemeral() {
        String path = "/zk/test";
        
        createEphemeral(path);

        List<String> childrens = getChildren("/zk");

        Assert.assertEquals(1, childrens.size());
   }

   private void createEphemeral(String path) {
        try {
            zkClient.create().withMode(CreateMode.EPHEMERAL).forPath(path);
        } catch (NodeExistsException e) {
            logger.warn("ZNode " + path + " already exists.", e);
            throw new IllegalStateException(e.getMessage(), e);
        } catch (Exception e) {
            throw new IllegalStateException(e.getMessage(), e);
        }
    }

    private List<String> getChildren(String path) {
        try {
            return zkClient.getChildren().forPath(path);
        } catch (NoNodeException e) {
            return new ArrayList<>();
        } catch (Exception e) {
            throw new IllegalStateException(e.getMessage(), e);
        }
    }

单测完毕后关闭zookeeper server

@AfterClass
public static void closeZkServer() throws IOException {
    zkServer.close();
}

相关文章:

  • Linux shell编程学习笔记56:date命令——显示或设置系统时间与日期
  • 力扣linkedlist
  • Go-知识并发控制Context
  • C语言 链表经典OJ题
  • 策略模式结合Spring使用
  • 学生信息管理系统C++
  • ldap协议(常用于统一身份认证)与dict协议(在线词典)
  • 深入解析JVM堆内存管理:对象流转与优化策略全揭秘
  • Day40 代码随想录打卡|二叉树篇---完全二叉树的节点个数
  • 【linux】(2)文件内容排序sort
  • 【射击game】
  • WebGL开发三维家装设计
  • python采集晋江文学城小说数据
  • mybatis配置环境流程
  • 教务管理系统带万字文档基于springboot+vue的校务管理系统java项目
  • 16:00面试,16:08就出来了,问的问题有点变态。。。
  • 硬币检测电路设计
  • C++ 的 Tag Dispatching(标签派发) 惯用法
  • 深入Netty RPC内核:编码、通信与性能优化全指南
  • cv2函数实践-图像处理(中心外扩的最佳RoI/根据两个坐标点求缩放+偏移后的RoI/滑窗切片/VOC的颜色+调色板)
  • 一热就出汗 VS 热死都不出汗的人,哪个更健康?
  • 经彩申城!上海网络大V沙龙活动走进闵行
  • 98岁动物学家、北京大学教授杨安峰逝世
  • 首届上海老年学习课程展将在今年10月举办
  • 司法部:民营经济促进法明确禁止违规异地执法、利用行政或者刑事手段违法干预经济纠纷
  • 小米回应SU7Ultra排位模式限制车辆动力:暂停推送更新