当前位置: 首页 > 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的颜色+调色板)
  • 响应式网页怎么设计/百度快照优化
  • 滕州本地网站建设/教育培训排行榜前十名
  • 有什么兼职做it的网站好/爱站网长尾词挖掘
  • 洱源网站建设/seo关键词优化软件合作
  • 信息网站的建设/seo外链是什么
  • 政府部门网站建设的目的/青岛快速排名优化