Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.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
Testing 任何camunda bpmn工艺的动态测试_Testing_Bpmn_Camunda - Fatal编程技术网

Testing 任何camunda bpmn工艺的动态测试

Testing 任何camunda bpmn工艺的动态测试,testing,bpmn,camunda,Testing,Bpmn,Camunda,我正在研究Camunda java代码,我正在寻找一种可以用来测试任何bpmn流程的测试方法 我做了一些google搜索,在Camunda文档中找到了一些关于单元测试的想法,但它是针对特定bpmn模型的DoTest。 我需要一个测试任何bpmn模型(只需传递bpmn文件名和进程id等) 该策略应考虑与DB的集成,以获得任何预期路径的候选对象(用户和组)。我知道我可能无法做到这一点,但我有一个大型模型,用传统方法测试所有模型将是浪费时间的。Mohammad,你的问题很有趣-这个目标可以实现(对bp

我正在研究Camunda java代码,我正在寻找一种可以用来测试任何bpmn流程的测试方法

我做了一些google搜索,在Camunda文档中找到了一些关于单元测试的想法,但它是针对特定bpmn模型的DoTest。 我需要一个测试任何bpmn模型(只需传递bpmn文件名和进程id等)
该策略应考虑与DB的集成,以获得任何预期路径的候选对象(用户和组)。我知道我可能无法做到这一点,但我有一个大型模型,用传统方法测试所有模型将是浪费时间的。

Mohammad,你的问题很有趣-这个目标可以实现(对bpmn的测试可以是动态的),如果我们谈论的不是很详细的测试。 请看下面我的代码,它是根据您对这种常见测试的想法编写的(当然,正如我所理解的那样) 我在其中使用和libs

首先,在测试过程中,您向您的测试提供有关“等待状态”的信息(这可以通过
json
file来完成-用于不更改代码)


希望这对你的工作有帮助。

穆罕默德,你好。看看下面的解决方案-它的工作,可以为您提供帮助。如果你有机会,给出反馈,请感谢你回答我的问题我真的很感激,这是我所说的很好的实现
    // optional - for mocking services for http-connector call, et.c.
    private Map<String, Object> configs = withVariables(
            "URL_TO_SERVICE", "http://mock-url.com/service"
    );

    private Map<String, Map<String, Object>> userTaskIdToResultVars = new LinkedHashMap<String, Map<String, Object>>() {{
        put("user_task_0", withVariables(
                "a", 0
        ));
        put("user_task_1", withVariables(
                "var0", "var0Value",
                "var1", "var1Value"));
    }};

    // optional - if you want to check vars during process execution
    private Map<String, Map<String, Object>> userTaskIdToAssertVars = new LinkedHashMap<String, Map<String, Object>>() {{
        put("user_task_1", withVariables(
                "a", 0
        ));
    }};
@Mock
    private ProcessScenario processScenario;

    @Before
    public void defineHappyScenario() {
        MockitoAnnotations.initMocks(this);

        for (String taskId : userTaskIdToResultVars.keySet()) {
            when(processScenario.waitsAtUserTask(taskId)).thenReturn(
                    (task) -> {
                        // optional - if you want to check vars during process execution
                        Map<String, Object> varsToCheck = userTaskIdToAssertVars.get(taskId);
                        if (varsToCheck != null) {
                            assertThat(task.getProcessInstance())
                                    .variables().containsAllEntriesOf(varsToCheck);
                        }

                        task.complete(userTaskIdToResultVars.get(taskId));
                    });
        }

        // If it needs, we describe mocks for other wait states in same way, 
        // when(processScenario.waitsAtSignalIntermediateCatchEvent(signalCatchId).thenReturn(...);

    }
@Test
    @Deployment(resources = "diagram_2.bpmn")
    public void testHappyPath() {
        Scenario scenario = Scenario.run(processScenario).startByKey(PROCESS_DEFINITION_KEY, configs).execute();
        ProcessInstance process = scenario.instance(processScenario);
        assertThat(process).isStarted();

        assertThat(process).hasPassedInOrder(     //  or check execution order of all elements -- not only wait-states (give them in additional file)
                userTaskIdToResultVars.keySet().toArray(new String[0])     //   user_task_0, user_task_1
        );
        assertThat(process).isEnded();
    }