11

为了对 isGlobalQuery 方法进行单元测试,我们需要使用一个单元测试框架,如 JUnit,并结合 mocking 框架(如 Mockito)来模拟依赖对象的行为。下面是一个详细的单元测试示例,假设我们使用的是 JUnit 5 和 Mockito。

1. 引入依赖

首先,确保你的项目中已经引入了 JUnit 和 Mockito 的依赖。如果你使用的是 Maven,可以在 pom.xml 中添加以下依赖:

<dependencies>
    <!-- JUnit 5 -->
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>5.7.0</version>
        <scope>test</scope>
    </dependency>

    <!-- Mockito -->
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <version>3.6.28</version>
        <scope>test</scope>
    </dependency>

    <!-- Mockito for JUnit 5 -->
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-junit-jupiter</artifactId>
        <version>3.6.28</version>
        <scope>test</scope>
    </dependency>
</dependencies>

2. 编写单元测试

假设 DepartmentServiceImpl 是我们要测试的类,我们可以编写如下单元测试:

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.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;

import com.example.service.DepartmentServiceImpl;
import com.example.mapper.DepartmentMapper;
import com.example.request.QueryDepartmentGlobalQueryRequest;
import com.example.response.QueryDepartmentGlobalQueryResponse;
import com.example.entity.Department;
import com.example.utils.RespUtils;
import com.example.enums.ErrorCodeEnum;

public class DepartmentServiceImplTest {

    @Mock
    private DepartmentMapper departmentMapper;

    @InjectMocks
    private DepartmentServiceImpl departmentService;

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

    @Test
    public void testIsGlobalQuery_DepartmentExists_GlobalQueryTrue() {
        // 准备数据
        String departmentId = "123";
        Department department = new Department();
        department.setDepartmentId(departmentId);
        department.setGlobalQuery(true);
        department.setQueryEffectiveDate(new Date());
        department.setQueryPermanentFlag(true);

        // 模拟行为
        when(departmentMapper.selectOneByExample(any())).thenReturn(department);

        // 执行方法
        QueryDepartmentGlobalQueryRequest request = new QueryDepartmentGlobalQueryRequest();
        request.setDepartmentId(departmentId);
        QueryDepartmentGlobalQueryResponse response = departmentService.isGlobalQuery(request);

        // 断言结果
        assertNotNull(response);
        assertTrue(response.getGlobalQueryFlag());
        assertEquals(department.getQueryEffectiveDate(), response.getEffectiveDate());
        assertTrue(response.getPermanentFlag());
    }

    @Test
    public void testIsGlobalQuery_DepartmentExists_GlobalQueryFalse() {
        // 准备数据
        String departmentId = "123";
        Department department = new Department();
        department.setDepartmentId(departmentId);
        department.setGlobalQuery(false);
        department.setQueryEffectiveDate(new Date());
        department.setQueryPermanentFlag(true);

        // 模拟行为
        when(departmentMapper.selectOneByExample(any())).thenReturn(department);

        // 执行方法
        QueryDepartmentGlobalQueryRequest request = new QueryDepartmentGlobalQueryRequest();
        request.setDepartmentId(departmentId);
        QueryDepartmentGlobalQueryResponse response = departmentService.isGlobalQuery(request);

        // 断言结果
        assertNotNull(response);
        assertFalse(response.getGlobalQueryFlag());
        assertEquals(department.getQueryEffectiveDate(), response.getEffectiveDate());
        assertTrue(response.getPermanentFlag());
    }

    @Test
    public void testIsGlobalQuery_DepartmentNotExists() {
        // 准备数据
        String departmentId = "123";

        // 模拟行为
        when(departmentMapper.selectOneByExample(any())).thenReturn(null);

        // 执行方法
        QueryDepartmentGlobalQueryRequest request = new QueryDepartmentGlobalQueryRequest();
        request.setDepartmentId(departmentId);
        QueryDepartmentGlobalQueryResponse response = departmentService.isGlobalQuery(request);

        // 断言结果
        assertNotNull(response);
        assertEquals(ErrorCodeEnum.DEPARTMENT_NOT_EXIST.getCode(), response.getCode());
    }

    @Test
    public void testIsGlobalQuery_GlobalQueryExpired() {
        // 准备数据
        String departmentId = "123";
        Department department = new Department();
        department.setDepartmentId(departmentId);
        department.setGlobalQuery(true);
        department.setQueryEffectiveDate(Date.from(Instant.now().minus(1, ChronoUnit.DAYS)));
        department.setQueryPermanentFlag(false);

        // 模拟行为
        when(departmentMapper.selectOneByExample(any())).thenReturn(department);

        // 执行方法
        QueryDepartmentGlobalQueryRequest request = new QueryDepartmentGlobalQueryRequest();
        request.setDepartmentId(departmentId);
        QueryDepartmentGlobalQueryResponse response = departmentService.isGlobalQuery(request);

        // 断言结果
        assertNotNull(response);
        assertFalse(response.getGlobalQueryFlag());
        assertEquals(department.getQueryEffectiveDate(), response.getEffectiveDate());
        assertFalse(response.getPermanentFlag());
    }
}

3. 测试说明

  • testIsGlobalQuery_DepartmentExists_GlobalQueryTrue: 测试部门存在且 globalQuerytrue 的情况。
  • testIsGlobalQuery_DepartmentExists_GlobalQueryFalse: 测试部门存在且 globalQueryfalse 的情况。
  • testIsGlobalQuery_DepartmentNotExists: 测试部门不存在的情况。
  • testIsGlobalQuery_GlobalQueryExpired: 测试 globalQuery 有效期限已过期的情况。

4. 运行测试

你可以使用 IDE(如 IntelliJ IDEA 或 Eclipse)中的内置工具运行这些测试,也可以通过命令行运行:

mvn test

这将运行所有的单元测试,并输出测试结果。

posted @ 2024-11-13 15:47  一曲微茫  阅读(4)  评论(0编辑  收藏  举报