Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing BPMN文件的单元测试_Unit Testing_Activiti_Bpmn - Fatal编程技术网

Unit testing BPMN文件的单元测试

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上运行它,那么您可

大家好,我们正在SpringMicroServices上使用Activiti6.0.0和SpringBoot应用程序。我必须对具有DelegateExpression的bpmn文件编写单元测试。谁能告诉我一些关于UnitTest的想法吗?

我以前做过一个经过充分测试的activiti项目。根据你的问题,我把它上传到我的github上,所以你可以访问这个答案的完整的可执行源代码。该项目基于Maven、Activiti、Spring、H2和JUnit。但如果您想在SpringBoot上运行它,那么您可以看到我的另一个示例项目。 activit测试项目结构:

  • Maven项目POM.xml 您可以将(activiti测试)项目作为现有的Maven项目导入IDE或任何您喜欢的地方
  • 重要的依赖性是:

        <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测试项目结构:

  • Maven项目POM.xml 您可以将(activiti测试)项目作为现有的Maven项目导入IDE或任何您喜欢的地方
  • 重要的依赖性是:

        <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"};
        }
    
    }