Back to Repositories

Testing BPM Task Candidate Department Member Strategy in ruoyi-vue-pro

This test suite validates the BpmTaskCandidateDeptMemberStrategy class functionality in handling department member calculations for BPM task assignments. It ensures proper user ID resolution from department IDs through mock interactions with department and user APIs.

Test Coverage Overview

The test suite provides focused coverage of the department member calculation logic for BPM task candidates.

Key areas tested include:
  • Department ID parameter parsing
  • User retrieval by department IDs
  • Result set transformation and validation
Integration points with DeptApi and AdminUserApi are verified through mock interactions.

Implementation Analysis

The testing approach utilizes Mockito for dependency isolation and JUnit for assertions. Mock responses are configured for the AdminUserApi to simulate user retrieval, with randomized test data generation for consistent but unique test scenarios.

The test implements the BaseMockitoUnitTest pattern for standardized mock setup and verification.

Technical Details

Testing tools and configuration:
  • JUnit Jupiter for test execution
  • Mockito for dependency mocking
  • AssertJ for assertions
  • RandomUtils for test data generation
  • SetUtils for collection manipulation

Best Practices Demonstrated

The test implementation showcases several testing best practices:

  • Clear test method naming
  • Proper mock initialization and injection
  • Isolated test scenarios
  • Explicit parameter preparation
  • Clear assertion structure
  • Effective use of utility classes

yunaiv/ruoyi-vue-pro

yudao-module-bpm/yudao-module-bpm-biz/src/test/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/candidate/strategy/dept/BpmTaskCandidateDeptMemberStrategyTest.java

            
package cn.iocoder.yudao.module.bpm.framework.flowable.core.candidate.strategy.dept;

import cn.iocoder.yudao.framework.common.util.collection.SetUtils;
import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest;
import cn.iocoder.yudao.module.system.api.dept.DeptApi;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import org.assertj.core.util.Sets;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;

import java.util.Set;

import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
import static java.util.Arrays.asList;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.when;

public class BpmTaskCandidateDeptMemberStrategyTest extends BaseMockitoUnitTest {

    @InjectMocks
    private BpmTaskCandidateDeptMemberStrategy strategy;

    @Mock
    private DeptApi deptApi;
    @Mock
    private AdminUserApi adminUserApi;

    @Test
    public void testCalculateUsers() {
        // 准备参数
        String param = "10,20";
        // mock 方法
        when(adminUserApi.getUserListByDeptIds(eq(SetUtils.asSet(10L, 20L)))).thenReturn(asList(
                randomPojo(AdminUserRespDTO.class, o -> o.setId(11L)),
                randomPojo(AdminUserRespDTO.class, o -> o.setId(21L))));

        // 调用
        Set<Long> userIds = strategy.calculateUsers(param);
        // 断言结果
        assertEquals(Sets.newLinkedHashSet(11L, 21L), userIds);
    }

}