單元測試之Activiti(基於EmbeddedPostgres去加載Activiti核心類)

本文將基於EmbeddedPostgres去加載Activiti核心類,從而進行有關Activiti的Unit Test。有關EmbeddedPostgres的內容見上一篇文章:單元測試之EmbeddedPostgres

1、ActivitiConfig:配置Activiti核心類

 

import lombok.extern.slf4j.Slf4j;
import org.activiti.engine.*;
import org.activiti.engine.test.ActivitiRule;
import org.activiti.spring.ProcessEngineFactoryBean;
import org.activiti.spring.SpringProcessEngineConfiguration;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.orm.jpa.JpaTransactionManager;

import javax.sql.DataSource;

@Slf4j
@TestConfiguration
public class ActivitiConfig {

    @Autowired
    private DataSource dataSource;

    @Autowired
    private JpaTransactionManager transactionManager;

    @Bean
    public SpringProcessEngineConfiguration processEngineConfiguration() {
        SpringProcessEngineConfiguration processEngineConfiguration = new SpringProcessEngineConfiguration();
        processEngineConfiguration.setDataSource(dataSource);
        processEngineConfiguration.setTransactionManager(transactionManager);
        processEngineConfiguration.setDatabaseSchemaUpdate("true");
        return processEngineConfiguration;
    }

    @Bean
    public ProcessEngineFactoryBean processEngineFactoryBean(SpringProcessEngineConfiguration processEngineConfiguration) {
        ProcessEngineFactoryBean processEngineFactoryBean = new ProcessEngineFactoryBean();
        processEngineFactoryBean.setProcessEngineConfiguration(processEngineConfiguration);
        return processEngineFactoryBean;
    }

    @Bean
    public ProcessEngine processEngine(ProcessEngineFactoryBean processEngineFactoryBean) {
        try {
            return processEngineFactoryBean.getObject();
        } catch (Exception e) {
            log.error("create processEngine error", e);
            return null;
        }
    }

    @Bean
    public RepositoryService repositoryService(ProcessEngine processEngine) {
        return processEngine.getRepositoryService();
    }

    @Bean
    public RuntimeService runtimeService(ProcessEngine processEngine) {
        return processEngine.getRuntimeService();
    }

    @Bean
    public TaskService taskService(ProcessEngine processEngine) {
        return processEngine.getTaskService();
    }

    @Bean
    public HistoryService historyService(ProcessEngine processEngine) {
        return processEngine.getHistoryService();
    }

    @Bean
    public ManagementService managementService(ProcessEngine processEngine) {
        return processEngine.getManagementService();
    }

    @Bean
    public ActivitiRule activitiRule(ProcessEngine processEngine) {
        ActivitiRule activitiRule = new ActivitiRule();
        activitiRule.setProcessEngine(processEngine);
        return activitiRule;
    }
}

2、AbstractActivitiTest:Activiti測試基類

@Transactional
@DirtiesContext
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {JpaPersistConfig.class, ActivitiConfig.class},
        loader = AnnotationConfigContextLoader.class)
@Sql(scripts = {"classpath:schema-test.sql", "classpath:data-test.sql"},
        executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
public abstract class AbstractActivitiTest {

    @BeforeClass
    public static void beforeClass() {
        DBUtility.startDatabase();
    }

    @AfterClass
    public static void afterClass() throws Exception {
        DBUtility.shutdownDatabase();
    }
}

其中JpaPersistConfig和DBUtility類都是單元測試之EmbeddedPostgres的內容。DBUtility用於開啓和關閉Embedded Postgres,JpaPersistConfig用於加載實體類和JPA DAO層。

schema-test.sql是建表語句,data-test.sql是初始數據。

3、Activiti Unit Test

@Slf4j
public class ActivitiFlowTest extends AbstractActivitiTest {

    private static final String PROCESS_BPMN_PATH = "activiti.xml";
    private static final String PROCESS_PNG_PATH = "activiti.png";

    @Autowired
    private RepositoryService repositoryService;
    @Autowired
    private RuntimeService runtimeService;
    @Autowired
    private TaskService taskService;
    @Autowired
    private HistoryService historyService;


    // start activiti process
    @Before
    public void testAlertPushDataToReview() {
        repositoryService.createDeployment().name("PROCESS-NAME")
                .addClasspathResource(PROCESS_BPMN_PATH).addClasspathResource(PROCESS_PNG_PATH)
                .deploy();
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("PROCESS-KEY");
        Assert.assertNotNull(processInstance);
    }

    @Test
    public void test() {
        doSomething...
    }
}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章