Back to Repositories

Testing Role-Based Task Candidate Strategy in ruoyi-vue-pro

This test suite validates the BpmTaskCandidateRoleStrategy implementation for role-based task candidate calculation in a workflow process. It ensures proper user-role mapping and permission verification within the BPM module.

Test Coverage Overview

The test suite focuses on verifying the role-based task candidate calculation functionality.

Key areas covered include:
  • User role ID mapping verification
  • Role-based permission checks
  • Set-based user ID calculations
  • Integration with RoleApi and PermissionApi services

Implementation Analysis

The testing approach utilizes Mockito for dependency isolation and JUnit for test execution. The strategy implementation follows a mock-based pattern to verify the interaction between the candidate role strategy and external APIs.

Framework features utilized include:
  • Mockito InjectMocks and Mock annotations
  • JUnit Jupiter test declarations
  • BaseMockitoUnitTest extension

Technical Details

Testing infrastructure includes:
  • JUnit 5 Jupiter test framework
  • Mockito mocking framework
  • Custom BaseMockitoUnitTest base class
  • SetUtils utility for set operations
  • Mock configurations for RoleApi and PermissionApi

Best Practices Demonstrated

The test suite exemplifies several testing best practices including proper isolation of dependencies, clear test method naming, and explicit assertion statements.

Notable practices include:
  • Clear test setup with mock preparation
  • Explicit parameter documentation
  • Clean assertion structure
  • Proper separation of setup, execution, and verification 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/BpmTaskCandidateRoleStrategyTest.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.permission.PermissionApi;
import cn.iocoder.yudao.module.system.api.permission.RoleApi;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;

import java.util.Set;

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 BpmTaskCandidateRoleStrategyTest extends BaseMockitoUnitTest {

    @InjectMocks
    private BpmTaskCandidateRoleStrategy strategy;

    @Mock
    private RoleApi roleApi;
    @Mock
    private PermissionApi permissionApi;

    @Test
    public void testCalculateUsers() {
        // 准备参数
        String param = "1,2";
        // mock 方法
        when(permissionApi.getUserRoleIdListByRoleIds(eq(asSet(1L, 2L))))
            .thenReturn(asSet(11L, 22L));

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

}