Back to Repositories

Testing BPM Task Candidate Group Strategy Implementation in RuoYi Vue Pro

A comprehensive unit test suite for the BPM Task Candidate Group Strategy implementation in the RuoYi Vue Pro framework. This test class validates the user group calculation functionality for BPM task candidates.

Test Coverage Overview

The test suite focuses on validating the BpmTaskCandidateGroupStrategy’s core functionality for calculating user groups in BPM tasks.

  • Tests the calculation of user IDs from group parameters
  • Verifies correct mapping of group IDs to user sets
  • Validates integration with BpmUserGroupService
  • Covers mock data scenarios and assertions

Implementation Analysis

Implements a Mockito-based testing approach for isolating the strategy component from its dependencies.

Uses BaseMockitoUnitTest as the foundation and leverages @InjectMocks and @Mock annotations for dependency injection. The test demonstrates clean separation of concerns and proper mocking of external service calls.

Technical Details

  • JUnit Jupiter test framework
  • Mockito mocking framework
  • Custom RandomUtils for test data generation
  • SetUtils for collection manipulation
  • BaseMockitoUnitTest for base testing infrastructure

Best Practices Demonstrated

The test implementation showcases several testing best practices and patterns.

  • Clear test method naming and structure
  • Proper test data preparation and mocking
  • Explicit assertions using assertEquals
  • Clean separation of arrange, act, and assert phases
  • Effective use of utility classes for test data generation

yunaiv/ruoyi-vue-pro

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

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

import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest;
import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmUserGroupDO;
import cn.iocoder.yudao.module.bpm.service.definition.BpmUserGroupService;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;

import java.util.Arrays;
import java.util.Set;

import static cn.iocoder.yudao.framework.common.util.collection.SetUtils.asSet;
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.when;

@Disabled // TODO 芋艿:临时注释
public class BpmTaskCandidateGroupStrategyTest extends BaseMockitoUnitTest {

    @InjectMocks
    private BpmTaskCandidateGroupStrategy strategy;

    @Mock
    private BpmUserGroupService userGroupService;

    @Test
    public void testCalculateUsers() {
        // 准备参数
        String param = "1,2";
        // mock 方法
        BpmUserGroupDO userGroup1 = randomPojo(BpmUserGroupDO.class, o -> o.setUserIds(asSet(11L, 12L)));
        BpmUserGroupDO userGroup2 = randomPojo(BpmUserGroupDO.class, o -> o.setUserIds(asSet(21L, 22L)));
        when(userGroupService.getUserGroupList(eq(asSet(1L, 2L)))).thenReturn(Arrays.asList(userGroup1, userGroup2));

        // 调用
        Set<Long> userIds = strategy.calculateUsersByTask(null, param);
        // 断言
        assertEquals(asSet(11L, 12L, 21L, 22L), userIds);
    }

}