首页 > 其他分享 >快照接口 isRepositoryExists单元测试

快照接口 isRepositoryExists单元测试

时间:2024-11-21 09:28:45浏览次数:1  
标签:快照 单元测试 new class snapShotDTO1 isRepositoryExists org import any

好的,为了编写 restoreSnapshotIndices 方法的单元测试,我们需要考虑以下几个方面:

  1. 准备测试数据:创建一个 RestoreSnapshotIndicesRequest 对象,包含多个 SnapShotDTO 对象。
  2. 模拟依赖服务:使用 Mockito 模拟 restHighLevelClientindicesRestoreMapper 等依赖服务的行为。
  3. 执行测试:调用 restoreSnapshotIndices 方法并验证其行为。
  4. 验证结果:检查方法的返回值和依赖服务的调用次数等。

以下是具体的单元测试代码示例:

单元测试代码

package com.example.service.impl;

import com.example.entity.RestoreSnapshotIndicesRequest;
import com.example.entity.SnapShotDTO;
import com.example.entity.IndicesRestore;
import com.example.entity.IndicesRestoreRecord;
import com.example.exception.TitanException;
import com.example.mapper.IndicesRestoreMapper;
import com.example.mapper.IndicesRestoreRecordMapper;
import com.example.service.ElasticSearchService;
import com.example.service.SnapshotService;
import org.elasticsearch.action.admin.indices.close.CloseIndexRequest;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.admin.indices.restore.RestoreSnapshotRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.core.AcknowledgedResponse;
import org.elasticsearch.snapshots.GetRepositoriesRequest;
import org.elasticsearch.snapshots.GetRepositoriesResponse;
import org.elasticsearch.snapshots.RestoreSnapshotResponse;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;

import java.io.IOException;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.*;

class SnapshotServiceImplTest {

    @Mock
    private RestHighLevelClient restHighLevelClient;

    @Mock
    private ElasticSearchService elasticSearchService;

    @Mock
    private IndicesRestoreMapper indicesRestoreMapper;

    @Mock
    private IndicesRestoreRecordMapper indicesRestoreRecordMapper;

    @InjectMocks
    private SnapshotServiceImpl snapshotService;

    @BeforeEach
    void setUp() {
        MockitoAnnotations.openMocks(this);
    }

    @Test
    void testRestoreSnapshotIndicesSuccess() throws IOException {
        // 准备测试数据
        SnapShotDTO snapShotDTO1 = new SnapShotDTO();
        snapShotDTO1.setRepositoryName("repo1");
        snapShotDTO1.setSnapshotName("snap1");
        snapShotDTO1.setIndices(Arrays.asList("index1", "index2"));
        snapShotDTO1.setDelDate(new Date());

        SnapShotDTO snapShotDTO2 = new SnapShotDTO();
        snapShotDTO2.setRepositoryName("repo2");
        snapShotDTO2.setSnapshotName("snap2");
        snapShotDTO2.setIndices(Arrays.asList("index3", "index4"));
        snapShotDTO2.setDelDate(new Date());

        RestoreSnapshotIndicesRequest request = new RestoreSnapshotIndicesRequest();
        request.setSnapShotList(Arrays.asList(snapShotDTO1, snapShotDTO2));

        // 模拟依赖服务的行为
        doNothing().when(restHighLevelClient).snapshot().restore(any(RestoreSnapshotRequest.class), any(RequestOptions.class));
        doReturn(true).when(elasticSearchService).isIndexExist(anyString());
        doReturn(new AcknowledgedResponse(true)).when(restHighLevelClient).indices().delete(any(DeleteIndexRequest.class), any(RequestOptions.class));
        doReturn(new AcknowledgedResponse(true)).when(restHighLevelClient).indices().close(any(CloseIndexRequest.class), any(RequestOptions.class));
        doReturn(true).when(snapshotService).isRepositoryExists(anyString());

        // 执行测试
        RestoreSnapshotIndicesResponse response = snapshotService.restoreSnapshotIndices(request);

        // 验证结果
        assertEquals(0, response.getSuccess());
        verify(restHighLevelClient, times(2)).snapshot().restore(any(RestoreSnapshotRequest.class), any(RequestOptions.class));
        verify(indicesRestoreMapper, times(4)).insert(any(IndicesRestore.class));
        verify(indicesRestoreRecordMapper, times(2)).updateByExampleSelective(any(IndicesRestoreRecord.class), any());
    }

    @Test
    void testRestoreSnapshotIndicesFailure() throws IOException {
        // 准备测试数据
        SnapShotDTO snapShotDTO1 = new SnapShotDTO();
        snapShotDTO1.setRepositoryName("repo1");
        snapShotDTO1.setSnapshotName("snap1");
        snapShotDTO1.setIndices(Arrays.asList("index1", "index2"));
        snapShotDTO1.setDelDate(new Date());

        RestoreSnapshotIndicesRequest request = new RestoreSnapshotIndicesRequest();
        request.setSnapShotList(Arrays.asList(snapShotDTO1));

        // 模拟依赖服务的行为
        doThrow(new IOException("Simulated IO Exception")).when(restHighLevelClient).snapshot().restore(any(RestoreSnapshotRequest.class), any(RequestOptions.class));

        // 执行测试
        RestoreSnapshotIndicesResponse response = snapshotService.restoreSnapshotIndices(request);

        // 验证结果
        assertEquals(-1, response.getSuccess());
        verify(restHighLevelClient, times(1)).snapshot().restore(any(RestoreSnapshotRequest.class), any(RequestOptions.class));
        verify(indicesRestoreMapper, never()).insert(any(IndicesRestore.class));
        verify(indicesRestoreRecordMapper, never()).updateByExampleSelective(any(IndicesRestoreRecord.class), any());
    }

    @Test
    void testRestoreSnapshotIndicesWithNullRequest() {
        // 执行测试
        assertThrows(TitanException.class, () -> snapshotService.restoreSnapshotIndices(null));
    }

    @Test
    void testRestoreSnapshotIndicesWithEmptyRequest() {
        // 准备测试数据
        RestoreSnapshotIndicesRequest request = new RestoreSnapshotIndicesRequest();

        // 执行测试
        assertThrows(TitanException.class, () -> snapshotService.restoreSnapshotIndices(request));
    }

    @Test
    void testRestoreSnapshotIndicesWithEmptySnapShotList() {
        // 准备测试数据
        RestoreSnapshotIndicesRequest request = new RestoreSnapshotIndicesRequest();
        request.setSnapShotList(Arrays.asList());

        // 执行测试
        assertThrows(TitanException.class, () -> snapshotService.restoreSnapshotIndices(request));
    }
}

解释

  1. 准备测试数据

    • 创建了两个 SnapShotDTO 对象,分别设置仓库名称、快照名称、索引列表和删除日期。
    • 创建一个 RestoreSnapshotIndicesRequest 对象,并设置 SnapShotDTO 列表。
  2. 模拟依赖服务的行为

    • 使用 doNothing 模拟 restHighLevelClient.snapshot().restore 方法的行为。
    • 使用 doReturn 模拟 elasticSearchService.isIndexExistrestHighLevelClient.indices().deleterestHighLevelClient.indices().closesnapshotService.isRepositoryExists 方法的行为。
  3. 执行测试

    • 调用 snapshotService.restoreSnapshotIndices 方法并传递准备好的请求对象。
    • 验证方法的返回值和依赖服务的调用次数。
  4. 验证结果

    • 使用 assertEquals 验证返回值。
    • 使用 verify 验证依赖服务的调用次数。
  5. 异常测试

    • 测试 restoreSnapshotIndices 方法在接收到 null 请求、空请求和空 SnapShotDTO 列表时的行为,确保抛出 TitanException

这些测试用例覆盖了多种不同的输入情况,确保 restoreSnapshotIndices 方法在不同情况下都能正确处理。

标签:快照,单元测试,new,class,snapShotDTO1,isRepositoryExists,org,import,any
From: https://www.cnblogs.com/lmzzr24/p/18559934

相关文章

  • 似乎可以用源代码生成器生成用于单元测试的代理方法
    对于类中的非public方法,如果要进行单元测试就比较麻烦,因为单元测试项目里通常不能正常访问非public方法,此时解决方法一般有两个:一是把方法声明为internal,然后将单元测试项目设置为友元程序集。缺点是要改访问修饰符,对于我这种强迫症很不友好(二是用反射访问。缺点是接口要是改......
  • 存储快照原理
    快照有COW(CopyOnWrite,写时复制)和ROW(RedirectOnWrite,写重定向)两种实现方式。1.COWCOW(Copy-On-Write),写时拷贝,也称为写前拷贝。创建快照,如果源卷的数据发生了变化,快照系统会将原始数据拷贝到快照卷上的数据块中,然后再对源卷进行改写;OW快照在初始化的过程中仅创建用来描述......
  • 使用 JuiceFS 快照功能实现数据库发布与端到端测试
    今天的博客来自JuiceFS云服务用户Jerry,他们通过使用JuiceFSsnapshot功能,创新性地实现了数据的版本控制。Jerry,是一家位于北美的科技公司,利用人工智能和机器学习技术,简化用户购买汽车和家庭保险的比较及购买流程。在软件开发领域,严格的测试和受控发布已经成为几十年来的标......
  • 删除团队关联索引单元测试
    理解了,如果你不能更改RespUtils类,我们可以在测试用例中直接检查BaseResponse对象的成功状态和其他属性。以下是更新后的单元测试代码,不依赖于RespUtils中的方法。更新后的单元测试代码importstaticorg.junit.jupiter.api.Assertions.*;importstaticorg.mockito.Mocki......
  • 如何使用gtest编写C++单元测试代码
    目录一.为什么要编写单元测试代码二.gtest是什么三.下载四.使用方法4.1场景一4.2场景二4.3场景三五.其他一.为什么要编写单元测试代码相信很多人都不喜欢编写单元测试代码,但是单元测试对我们来说真的很重要,单元测试可以暴露出我们自己的代码的内部问题,从而保证我......
  • Java JUnit从入门到精通:一篇文章带你掌握单元测试
    JavaJUnit从入门到精通:一篇文章带你掌握单元测试前言在现代软件开发中,单元测试已经成为保证代码质量的重要手段。作为Java生态中最流行的单元测试框架,JUnit提供了强大而灵活的测试功能。本文将从基础开始,逐步深入JUnit的各个方面,帮助你全面掌握Java单元测试。目录JUnit......
  • Java单元测试完全指南:JUnit从入门到精通
    Java单元测试完全指南:JUnit从入门到精通一、前言在现代软件开发中,单元测试已经成为保证代码质量的重要手段。本文将全面介绍Java最流行的单元测试框架JUnit,从基础概念到高级特性,帮助你掌握单元测试的核心技能。二、目录JUnit基础及环境搭建核心注解详解注解最佳实践高级测......
  • C代码单元测试框架
    如何在Windows本地集成unity和CMocka单元测试框架? 一、Cmocka源码下载编译官方网站 https://cmocka.org/ 下载源码。CMocka使用CMake来管理构建过程,它能自动生成适用于MinGW的构建文件(MinGWMakefiles)。如果你想要在Windows上使用MinGW编译CMocka则......
  • 使用内存堆快照检测分离的 DOM 内存泄漏
    https://fe.okki.com/post/62cbfea7136f570343d89416/ 使用ChromeDevtools分析内存问题网页的内存限制对于Chrome浏览器,每个Tab页能使用的内存大小是有限制的。限制大小根据Chrome版本,Chrome位数(32/64),操作系统版本,会有所不同。可以通过window.performance.memory......
  • Maven(22)如何使用Maven进行单元测试?
    Maven提供了内置的支持来进行单元测试,主要通过maven-surefire-plugin插件实现。以下是如何使用Maven进行单元测试的详细步骤和代码示例:步骤1:添加测试依赖首先,确保你的项目中包含了测试框架的依赖,如JUnit。在pom.xml文件中,你需要添加JUnit依赖:<dependencies>...<......