Back to Repositories

Testing BPM Task Candidate Post Strategy Implementation in RuoYi-Vue-Pro

A comprehensive unit test suite for BPM task candidate post strategy in the RuoYi Vue Pro framework, focusing on user calculation logic based on post IDs.

Test Coverage Overview

This test suite focuses on validating the BpmTaskCandidatePostStrategy implementation, specifically testing user calculation based on post IDs.

Key areas covered include:
  • Post-based user calculation logic
  • Integration with PostApi and AdminUserApi services
  • Parameter parsing and validation
  • User ID set transformation and verification

Implementation Analysis

The testing approach utilizes Mockito for dependency injection and behavior simulation, ensuring isolated unit testing of the strategy component.

Notable patterns include:
  • Mock injection for external service dependencies
  • Data transformation testing with CollectionUtils
  • Assertion-based verification using JUnit Jupiter

Technical Details

Testing infrastructure includes:
  • JUnit Jupiter test framework
  • Mockito mocking framework
  • BaseMockitoUnitTest extension
  • Custom utility classes for collection handling
  • DTO objects for user response handling

Best Practices Demonstrated

The test suite exemplifies several testing best practices:

  • Clear test method naming conventions
  • Proper setup of mock objects and dependencies
  • Isolated test scenarios
  • Explicit parameter preparation and assertion
  • Clean separation of concerns between test phases

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/BpmTaskCandidatePostStrategyTest.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.system.api.dept.PostApi;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;

import java.util.List;
import java.util.Set;

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

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

    @InjectMocks
    private BpmTaskCandidatePostStrategy strategy;

    @Mock
    private PostApi postApi;
    @Mock
    private AdminUserApi adminUserApi;

    @Test
    public void testCalculateUsers() {
        // 准备参数
        String param = "1,2";
        // mock 方法
        List<AdminUserRespDTO> users = convertList(asSet(11L, 22L),
                id -> new AdminUserRespDTO().setId(id));
        when(adminUserApi.getUserListByPostIds(eq(asSet(1L, 2L)))).thenReturn(users);

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

}