Unit testing BPMN文件的单元测试
大家好,我们正在SpringMicroServices上使用Activiti6.0.0和SpringBoot应用程序。我必须对具有DelegateExpression的bpmn文件编写单元测试。谁能告诉我一些关于UnitTest的想法吗?我以前做过一个经过充分测试的activiti项目。根据你的问题,我把它上传到我的github上,所以你可以访问这个答案的完整的可执行源代码。该项目基于Maven、Activiti、Spring、H2和JUnit。但如果您想在SpringBoot上运行它,那么您可以看到我的另一个示例项目。 activit测试项目结构:Unit testing BPMN文件的单元测试,unit-testing,activiti,bpmn,Unit Testing,Activiti,Bpmn,大家好,我们正在SpringMicroServices上使用Activiti6.0.0和SpringBoot应用程序。我必须对具有DelegateExpression的bpmn文件编写单元测试。谁能告诉我一些关于UnitTest的想法吗?我以前做过一个经过充分测试的activiti项目。根据你的问题,我把它上传到我的github上,所以你可以访问这个答案的完整的可执行源代码。该项目基于Maven、Activiti、Spring、H2和JUnit。但如果您想在SpringBoot上运行它,那么您可
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${springframework.version}</version>
</dependency>
.
.
.
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>${activiti.version}</version>
</dependency>
.
.
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
.
.
.
4。准备测试环境
有一个名为BaseTest的类可以简化其他测试:
第一部分获取activiti服务的实例,第二部分是通过下一个代码块中的BaseTest子类部署流程的方法
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(BaseTest.APPCONTEXT)
public abstract class BaseTest implements ApplicationContextAware {
public static final String APPCONTEXT = "/applicationContext.xml";
Logger logger = Logger.getLogger(BaseTest.class);
public static ApplicationContext CONTEXT;
@Autowired(required=true)
protected ProcessDeployer processDeployer;
@Autowired
protected MyProcessEngine processEngine;
protected RuntimeService runtimeService;
protected TaskService taskService;
protected RepositoryService repositoryService;
protected HistoryService historyService;
@PostConstruct
public void init() {
runtimeService = processEngine.getProcessEngine().getRuntimeService();
taskService = processEngine.getProcessEngine().getTaskService();
repositoryService = processEngine.getProcessEngine().getRepositoryService();
historyService = processEngine.getProcessEngine().getHistoryService();
}
.
.
.
.
private List<String> deploymentIds = new ArrayList<String>();
@Before
public void deploy()
{
if(deploymentIds.size() > 0)
for(String deploymentId : deploymentIds)
repositoryService.deleteDeployment(deploymentId);
deploymentIds.clear();
long beforeCount = processDeployer.getDeployedCount();
logger.info("Number of Process Deployed Before start to deploy any new thing : " + beforeCount);
if(getBpmnFiles() != null)
for(String bpmn : getBpmnFiles())
{
if(bpmn != null)
deploymentIds.add(processDeployer.deploy(bpmn));
}
logger.info(processDeployer.getDeployedCount() + " Processes Deployed Successfully");
}
protected abstract String[] getBpmnFiles();
.
.
.
}
7.代表表达示例
在源链接中有许多DelegateExpression的示例,但现在我们创建了一个示例BPMN流程,该流程有两个服务任务,由DelegateExpression定义为使用Springbean自动连接:
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">
<process id="awProcess" name="My process" isExecutable="true">
<startEvent id="startevent1" name="Start"></startEvent>
<serviceTask id="servicetask1" name="Service Task" activiti:delegateExpression="${awServiceTask1}"></serviceTask>
<sequenceFlow id="flow1" sourceRef="startevent1" targetRef="servicetask1"></sequenceFlow>
<serviceTask id="servicetask2" name="Service Task" activiti:delegateExpression="${com.test.activiti.autowiredservicetask.AWServiceTask2}"></serviceTask>
<sequenceFlow id="flow2" sourceRef="servicetask1" targetRef="servicetask2"></sequenceFlow>
<endEvent id="endevent1" name="End"></endEvent>
<sequenceFlow id="flow3" sourceRef="servicetask2" targetRef="endevent1"></sequenceFlow>
</process>
</definitions>
类似的方式是AWServiceTask2的代码,您可以在找到完整的源代码。
测试等级为:
public class TestAWServiceTask extends BaseTest {
Logger logger = Logger.getLogger(TestAWServiceTask.class);
public static String KEY = "awProcess";
@Test
public void autoWireTest()
{
processDeployer.printAllProcessDefinition();
processEngine.getProcessEngine().getRuntimeService().startProcessInstanceByKey(KEY);
}
@Override
protected String[] getBpmnFiles() {
return new String[] {
"com/test/activiti/autowiredservicetask/AutoWireServiceTask.bpmn"};
}
}
我希望你得到了你想要的答案我以前做过一个经过充分测试的活动项目。根据你的问题,我把它上传到我的github上,所以你可以访问这个答案的完整的可执行源代码。该项目基于Maven、Activiti、Spring、H2和JUnit。但如果您想在SpringBoot上运行它,那么您可以看到我的另一个示例项目。 activit测试项目结构:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${springframework.version}</version>
</dependency>
.
.
.
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>${activiti.version}</version>
</dependency>
.
.
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
.
.
.
4。准备测试环境
有一个名为BaseTest的类可以简化其他测试:
第一部分获取activiti服务的实例,第二部分是通过下一个代码块中的BaseTest子类部署流程的方法
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(BaseTest.APPCONTEXT)
public abstract class BaseTest implements ApplicationContextAware {
public static final String APPCONTEXT = "/applicationContext.xml";
Logger logger = Logger.getLogger(BaseTest.class);
public static ApplicationContext CONTEXT;
@Autowired(required=true)
protected ProcessDeployer processDeployer;
@Autowired
protected MyProcessEngine processEngine;
protected RuntimeService runtimeService;
protected TaskService taskService;
protected RepositoryService repositoryService;
protected HistoryService historyService;
@PostConstruct
public void init() {
runtimeService = processEngine.getProcessEngine().getRuntimeService();
taskService = processEngine.getProcessEngine().getTaskService();
repositoryService = processEngine.getProcessEngine().getRepositoryService();
historyService = processEngine.getProcessEngine().getHistoryService();
}
.
.
.
.
private List<String> deploymentIds = new ArrayList<String>();
@Before
public void deploy()
{
if(deploymentIds.size() > 0)
for(String deploymentId : deploymentIds)
repositoryService.deleteDeployment(deploymentId);
deploymentIds.clear();
long beforeCount = processDeployer.getDeployedCount();
logger.info("Number of Process Deployed Before start to deploy any new thing : " + beforeCount);
if(getBpmnFiles() != null)
for(String bpmn : getBpmnFiles())
{
if(bpmn != null)
deploymentIds.add(processDeployer.deploy(bpmn));
}
logger.info(processDeployer.getDeployedCount() + " Processes Deployed Successfully");
}
protected abstract String[] getBpmnFiles();
.
.
.
}
7.代表表达示例
在源链接中有许多DelegateExpression的示例,但现在我们创建了一个示例BPMN流程,该流程有两个服务任务,由DelegateExpression定义为使用Springbean自动连接:
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">
<process id="awProcess" name="My process" isExecutable="true">
<startEvent id="startevent1" name="Start"></startEvent>
<serviceTask id="servicetask1" name="Service Task" activiti:delegateExpression="${awServiceTask1}"></serviceTask>
<sequenceFlow id="flow1" sourceRef="startevent1" targetRef="servicetask1"></sequenceFlow>
<serviceTask id="servicetask2" name="Service Task" activiti:delegateExpression="${com.test.activiti.autowiredservicetask.AWServiceTask2}"></serviceTask>
<sequenceFlow id="flow2" sourceRef="servicetask1" targetRef="servicetask2"></sequenceFlow>
<endEvent id="endevent1" name="End"></endEvent>
<sequenceFlow id="flow3" sourceRef="servicetask2" targetRef="endevent1"></sequenceFlow>
</process>
</definitions>
类似的方式是AWServiceTask2的代码,您可以在找到完整的源代码。
测试等级为:
public class TestAWServiceTask extends BaseTest {
Logger logger = Logger.getLogger(TestAWServiceTask.class);
public static String KEY = "awProcess";
@Test
public void autoWireTest()
{
processDeployer.printAllProcessDefinition();
processEngine.getProcessEngine().getRuntimeService().startProcessInstanceByKey(KEY);
}
@Override
protected String[] getBpmnFiles() {
return new String[] {
"com/test/activiti/autowiredservicetask/AutoWireServiceTask.bpmn"};
}
}
我希望您能得到您想要的答案感谢Mehdi Tahmasebi提供的参考实施@ManjunathMahashetti不客气,它解决了您的问题吗?感谢Mehdi Tahmasebi的参考实现@不客气,它解决了你的问题吗?
public class TestAWServiceTask extends BaseTest {
Logger logger = Logger.getLogger(TestAWServiceTask.class);
public static String KEY = "awProcess";
@Test
public void autoWireTest()
{
processDeployer.printAllProcessDefinition();
processEngine.getProcessEngine().getRuntimeService().startProcessInstanceByKey(KEY);
}
@Override
protected String[] getBpmnFiles() {
return new String[] {
"com/test/activiti/autowiredservicetask/AutoWireServiceTask.bpmn"};
}
}