本文将基于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...
}
}