练习

99 阅读6分钟

好的,让我们先来分析你提供的单元测试代码片段。从你上传的文件内容来看,这是一个关于 DepartmentService 的单元测试类 DepartmentServiceApiTest。这个类主要测试了一些与部门权限相关的功能,包括添加部门权限、查询部门索引模式以及全局查询标志等。

分析现有代码

1. 导入必要的包

import com.czb.titan.TitanBaseTest;
import com.czb.titan.api.DepartmentService;
import com.czb.titan.request.AddDepartmentPermissionRequest;
import com.czb.titan.request.QueryDepartmentGlobalQueryRequest;
import com.czb.titan.request.QueryDepartmentIndexPatternRequest;
import com.czb.titan.response.QueryDepartmentGlobalQueryResponse;
import com.czb.titan.response.QueryDepartmentIndexPatternResponse;
import com.czb.titan.response.DepartmentPermissionDTO;
import org.junit.Assert;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.Rollback;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;

2. 测试类定义

public class DepartmentServiceApiTest extends TitanBaseTest {
    @Autowired
    private DepartmentService departmentService;

3. 测试方法 testAddDepartmentPermission

@Test
//@Transactional
//@Rollback
public void testAddDepartmentPermission() {
    AddDepartmentPermissionRequest addDepartmentPermissionRequest = new AddDepartmentPermissionRequest();
    addDepartmentPermissionRequest.setDepartmentId("LY1_testAddDepartment_20201229");

    List<DepartmentPermissionDTO> permissionlist = new ArrayList<>();
    DepartmentPermissionDTO departmentPermissionDTO = DepartmentPermissionDTO.builder()
            .indexPatternName("LY11_testAddDepartment_20201229")
            .build();
    permissionlist.add(departmentPermissionDTO);
    addDepartmentPermissionRequest.setDepartmentPermissionDTOList(permissionlist);
    departmentService.addDepartmentPermission(addDepartmentPermissionRequest);

    addDepartmentPermissionRequest.setDepartmentId("LY2_testAddDepartment_20201229");
    List<String> list2 = new ArrayList<>();
    List<DepartmentPermissionDTO> permissionlist2 = new ArrayList<>();
    list2.add("LY21_testAddDepartment_20201229");
    list2.add("LY22_testAddDepartment_20201229");
    for (String pattern : list2) {
        DepartmentPermissionDTO departmentPermissionDTO2 = DepartmentPermissionDTO.builder()
                .indexPatternName(pattern)
                .build();
        permissionlist2.add(departmentPermissionDTO2);
    }
    addDepartmentPermissionRequest.setDepartmentPermissionDTOList(permissionlist2);
    departmentService.addDepartmentPermission(addDepartmentPermissionRequest);

    addDepartmentPermissionRequest.setDepartmentId("LY3_testAddDepartment_20201229");
    // 这部分代码似乎是未完成的
}

4. 测试方法 testQueryIndexPatternByDepartmentId

@Test
//@Transactional
//@Rollback
public void testQueryIndexPatternByDepartmentId() {
    QueryDepartmentIndexPatternRequest queryDepartmentIndexPatternRequest = new QueryDepartmentIndexPatternRequest();

    queryDepartmentIndexPatternRequest.setDepartmentId("LY1_testAddDepartment_20201229");
    QueryDepartmentIndexPatternResponse response = departmentService.queryIndexPatternByDepartmentId(queryDepartmentIndexPatternRequest);

    Assert.assertEquals((Long) 111111L, response.getIndexPatternList().get(0).getId());
    Assert.assertEquals("LY11_testAddDepartment_20201229", response.getIndexPatternList().get(0).getApplicationName());
    Assert.assertEquals("LY11_testAddDepartment_20201229", response.getIndexPatternList().get(0).getIndexPatternName());
    Assert.assertEquals("LY11_testAddDepartment_20201229", response.getIndexPatternList().get(0).getSystemId());

    queryDepartmentIndexPatternRequest.setDepartmentId("LY2_testAddDepartment_20201229");
    response = departmentService.queryIndexPatternByDepartmentId(queryDepartmentIndexPatternRequest);

    Assert.assertEquals((Long) 111112L, response.getIndexPatternList().get(0).getId());
    Assert.assertEquals("LY21_testAddDepartment_20201229", response.getIndexPatternList().get(0).getApplicationName());
    Assert.assertEquals("LY21_testAddDepartment_20201229", response.getIndexPatternList().get(0).getIndexPatternName());
    Assert.assertEquals("LY21_testAddDepartment_20201229", response.getIndexPatternList().get(0).getSystemId());
    Assert.assertEquals((Long) 111113L, response.getIndexPatternList().get(1).getId());
    Assert.assertEquals("LY22_testAddDepartment_20201229", response.getIndexPatternList().get(1).getApplicationName());
    Assert.assertEquals("LY22_testAddDepartment_20201229", response.getIndexPatternList().get(1).getIndexPatternName());
    Assert.assertEquals("LY22_testAddDepartment_20201229", response.getIndexPatternList().get(1).getSystemId());

    queryDepartmentIndexPatternRequest.setDepartmentId("LY3_testAddDepartment_20201229");
    response = departmentService.queryIndexPatternByDepartmentId(queryDepartmentIndexPatternRequest);

    Assert.assertEquals((Long) 111114L, response.getIndexPatternList().get(0).getId());
    Assert.assertEquals("LY31_testAddDepartment_20201229", response.getIndexPatternList().get(0).getApplicationName());
    Assert.assertEquals("LY31_testAddDepartment_20201229", response.getIndexPatternList().get(0).getIndexPatternName());
    Assert.assertEquals("LY31_testAddDepartment_20201229", response.getIndexPatternList().get(0).getSystemId());
}

5. 测试方法 testIsGlobalQuery

@Test
//@Transactional
//@Rollback
public void testIsGlobalQuery() {
    QueryDepartmentGlobalQueryRequest queryDepartmentGlobalQueryRequest = new QueryDepartmentGlobalQueryRequest("LY1_testAddDepartment_20201229");
    QueryDepartmentGlobalQueryResponse response = departmentService.isGlobalQuery(queryDepartmentGlobalQueryRequest);
    Assert.assertEquals(false, response.getGlobalQueryFlag());

    queryDepartmentGlobalQueryRequest = new QueryDepartmentGlobalQueryRequest("LY4_testAddDepartment_20201229");
    response = departmentService.isGlobalQuery(queryDepartmentGlobalQueryRequest);
    Assert.assertEquals(true, response.getGlobalQueryFlag());
}

转换为 Spring Boot 单元测试

我们将这些测试方法转换为 Spring Boot 的单元测试,并使用 @SpringBootTest@MockBean 注解来创建一个完整的 Spring 上下文,并模拟 DepartmentService 的行为。

转换后的代码

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

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.czb.titan.TitanBaseTest;
import com.czb.titan.api.DepartmentService;
import com.czb.titan.request.AddDepartmentPermissionRequest;
import com.czb.titan.request.QueryDepartmentGlobalQueryRequest;
import com.czb.titan.request.QueryDepartmentIndexPatternRequest;
import com.czb.titan.response.QueryDepartmentGlobalQueryResponse;
import com.czb.titan.response.QueryDepartmentIndexPatternResponse;
import com.czb.titan.response.DepartmentPermissionDTO;

@SpringBootTest
public class DepartmentServiceApiTest extends TitanBaseTest {

    @MockBean
    private DepartmentService departmentService;

    @BeforeEach
    public void setUp() {
        // 初始化代码,如果需要的话
    }

    @Test
    public void testAddDepartmentPermission() throws ParseException {
        // 准备数据
        AddDepartmentPermissionRequest request = new AddDepartmentPermissionRequest();
        request.setDepartmentId("LY1_testAddDepartment_20201229");

        List<DepartmentPermissionDTO> permissionList = new ArrayList<>();
        DepartmentPermissionDTO permissionDTO = DepartmentPermissionDTO.builder()
                .indexPatternName("LY11_testAddDepartment_20201229")
                .build();
        permissionList.add(permissionDTO);
        request.setDepartmentPermissionDTOList(permissionList);

        // 模拟行为
        when(departmentService.addDepartmentPermission(request)).thenReturn(true);

        // 执行方法
        boolean result = departmentService.addDepartmentPermission(request);

        // 断言结果
        assertTrue(result);

        // 继续测试其他部门
        request.setDepartmentId("LY2_testAddDepartment_20201229");
        List<String> patterns = new ArrayList<>();
        patterns.add("LY21_testAddDepartment_20201229");
        patterns.add("LY22_testAddDepartment_20201229");

        List<DepartmentPermissionDTO> permissionList2 = new ArrayList<>();
        for (String pattern : patterns) {
            DepartmentPermissionDTO permissionDTO2 = DepartmentPermissionDTO.builder()
                    .indexPatternName(pattern)
                    .build();
            permissionList2.add(permissionDTO2);
        }
        request.setDepartmentPermissionDTOList(permissionList2);

        // 模拟行为
        when(departmentService.addDepartmentPermission(request)).thenReturn(true);

        // 执行方法
        result = departmentService.addDepartmentPermission(request);

        // 断言结果
        assertTrue(result);
    }

    @Test
    public void testQueryIndexPatternByDepartmentId() throws ParseException {
        // 准备数据
        QueryDepartmentIndexPatternRequest request = new QueryDepartmentIndexPatternRequest();
        request.setDepartmentId("LY1_testAddDepartment_20201229");

        // 模拟行为
        QueryDepartmentIndexPatternResponse response = new QueryDepartmentIndexPatternResponse();
        List<DepartmentPermissionDTO> indexPatternList = new ArrayList<>();
        DepartmentPermissionDTO dto1 = DepartmentPermissionDTO.builder()
                .id(111111L)
                .applicationName("LY11_testAddDepartment_20201229")
                .indexPatternName("LY11_testAddDepartment_20201229")
                .systemId("LY11_testAddDepartment_20201229")
                .build();
        indexPatternList.add(dto1);
        response.setIndexPatternList(indexPatternList);
        when(departmentService.queryIndexPatternByDepartmentId(request)).thenReturn(response);

        // 执行方法
        response = departmentService.queryIndexPatternByDepartmentId(request);

        // 断言结果
        Assert.assertEquals((Long) 111111L, response.getIndexPatternList().get(0).getId());
        Assert.assertEquals("LY11_testAddDepartment_20201229", response.getIndexPatternList().get(0).getApplicationName());
        Assert.assertEquals("LY11_testAddDepartment_20201229", response.getIndexPatternList().get(0).getIndexPatternName());
        Assert.assertEquals("LY11_testAddDepartment_20201229", response.getIndexPatternList().get(0).getSystemId());

        // 继续测试其他部门
        request.setDepartmentId("LY2_testAddDepartment_20201229");
        response = new QueryDepartmentIndexPatternResponse();
        indexPatternList = new ArrayList<>();
        DepartmentPermissionDTO dto2 = DepartmentPermissionDTO.builder()
                .id(111112L)
                .applicationName("LY21_testAddDepartment_20201229")
                .indexPatternName("LY21_testAddDepartment_20201229")
                .systemId("LY21_testAddDepartment_20201229")
                .build();
        DepartmentPermissionDTO dto3 = DepartmentPermissionDTO.builder()
                .id(111113L)
                .applicationName("LY22_testAddDepartment_20201229")
                .indexPatternName("LY22_testAddDepartment_20201229")
                .systemId("LY22_testAddDepartment_20201229")
                .build();
        indexPatternList.add(dto2);
        indexPatternList.add(dto3);
        response.setIndexPatternList(indexPatternList);
        when(departmentService.queryIndexPatternByDepartmentId(request)).thenReturn(response);

        // 执行方法
        response = departmentService.queryIndexPatternByDepartmentId(request);

        // 断言结果
        Assert.assertEquals((Long) 111112L, response.getIndexPatternList().get(0).getId());
        Assert.assertEquals("LY21_testAddDepartment_20201229", response.getIndexPatternList().get(0).getApplicationName());
        Assert.assertEquals("LY21_testAddDepartment_20201229", response.getIndexPatternList().get(0).getIndexPatternName());
        Assert.assertEquals("LY21_testAddDepartment_20201229", response.getIndexPatternList().get(0).getSystemId());
        Assert.assertEquals((Long) 111113L, response.getIndexPatternList().get(1).getId());
        Assert.assertEquals("LY22_testAddDepartment_20201229", response.getIndexPatternList().get(1).getApplicationName());
        Assert.assertEquals("LY22_testAddDepartment_20201229", response.getIndexPatternList().get(1).getIndexPatternName());
        Assert.assertEquals("LY22_testAddDepartment_20201229", response.getIndexPatternList().get(1).getSystemId());

        // 继续测试其他部门
        request.setDepartmentId("LY3_testAddDepartment_20201229");
        response = new QueryDepartmentIndexPatternResponse();
        indexPatternList = new ArrayList<>();
        DepartmentPermissionDTO dto4 = DepartmentPermissionDTO.builder()
                .id(111114L)
                .applicationName("LY31_testAddDepartment_20201229")
                .indexPatternName("LY31_testAddDepartment_20201229")
                .systemId("LY31_testAddDepartment_20201229")
                .build();
        indexPatternList.add(dto4);
        response.setIndexPatternList(indexPatternList);
        when(departmentService.queryIndexPatternByDepartmentId(request)).thenReturn(response);

        // 执行方法
        response = departmentService.queryIndexPatternByDepartmentId(request);

        // 断言结果
        Assert.assertEquals((Long) 111114L, response.getIndexPatternList().get(0).getId());
        Assert.assertEquals("LY31_testAddDepartment_20201229", response.getIndexPatternList().get(0).getApplicationName());
        Assert.assertEquals("LY31_testAddDepartment_20201229", response.getIndexPatternList().get(0).getIndexPatternName());
        Assert.assertEquals("LY31_testAddDepartment_20201229", response.getIndexPatternList().get(0).getSystemId());
    }

    @Test
    public void testIsGlobalQuery() {
        // 准备数据
        QueryDepartmentGlobalQueryRequest request1 = new QueryDepartmentGlobalQueryRequest("LY1_testAddDepartment_20201229");

        // 模拟行为
        QueryDepartmentGlobalQueryResponse response1 = new QueryDepartmentGlobalQueryResponse();
        response1.setGlobalQueryFlag(false);
        when(departmentService.isGlobalQuery(request1)).thenReturn(response1);

        // 执行方法
        QueryDepartmentGlobalQueryResponse response = departmentService.isGlobalQuery(request1);

        // 断言结果
        Assert.assertFalse(response.getGlobalQueryFlag());

        // 继续测试其他部门
        QueryDepartmentGlobalQueryRequest request2 = new QueryDepartmentGlobalQueryRequest("LY4_testAddDepartment_20201229");
        QueryDepartmentGlobalQueryResponse response2 = new QueryDepartmentGlobalQueryResponse();
        response2.setGlobalQueryFlag(true);
        when(departmentService.isGlobalQuery(request2)).thenReturn(response2);

        // 执行方法
        response = departmentService.isGlobalQuery(request2);

        // 断言结果
        Assert.assertTrue(response.getGlobalQueryFlag());
    }
}

关键点总结

  1. 导入必要的包:确保导入所有必要的包和类。
  2. 使用注解:使用 @SpringBootTest@MockBean 注解来创建一个完整的 Spring 上下文,并模拟 DepartmentService 的行为。
  3. 准备数据:为每个测试方法准备必要的请求对象和响应对象。
  4. 模拟行为:使用 Mockito 模拟 DepartmentService 的行为。
  5. 执行方法:调用被测试的方法。
  6. 断言结果:使用 assert 方法验证结果。

通过这些步骤,你应该能够将现有的单元测试代码成功转换为 Spring Boot 的单元测试。希望这对你有所帮助!如果有其他问题,请随时提问。