сamunda替换测试中外部任务的行为

holgip5t  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(282)

我创建了简单的camundaspringboot项目,还使用switcher创建了简单的bpmn过程(5.5 kb)
我使用带有外部实现的服务任务作为springbean。我想为进程编写测试,但不想测试bean是如何工作的。因为一般来说,我使用外部实现连接到db,并将参数保存到上下文或rest调用到内部应用程序。例如,我想跳过执行服务任务(一个),而是为切换器设置变量。我尝试将camundabpmAssert场景用于测试过程,并编写了简单的测试工作流测试。
我注意到如果我对one.class使用@mockbean,那么camunda将跳过委托执行。如果使用@mock,那么camunda将执行委托执行。
对不起,英语不好

@服务公共类一实现javadelegate{private final random=new random();

@Override
public void execute(DelegateExecution execution) throws Exception {
    System.out.println("Hello, One!");
    execution.setVariable("check", isValue());
}

public boolean isValue() {
    return random.nextBoolean();
}

}
工作流测试
@springboottest@runwith(springrunner.class)@deployment(resources=“process.bpmn”)公共类workflowtest扩展了abstractprocessengineruletest{

@Mock
private ProcessScenario insuranceApplication;

@MockBean
private One one;

@Before
public void init() {
    MockitoAnnotations.initMocks(this);
    Mocks.register("one", one);
}

@Test
public void shouldExecuteHappyPath() throws Exception {
    // given
    when(insuranceApplication.waitsAtServiceTask("Task_generator")).thenReturn(externalTaskDelegate -> {
                externalTaskDelegate.complete(withVariables("check", true));
            }
    );

    String processDefinitionKey = "camunda-test-process";
    Scenario scenario = Scenario.run(insuranceApplication)
            .startByKey(processDefinitionKey) // either just start process by key ...
            .execute();

    verify(insuranceApplication).hasFinished("end_true");
    verify(insuranceApplication, never()).hasStarted("three");
    verify(insuranceApplication, atLeastOnce()).hasStarted("two");

    assertThat(scenario.instance(insuranceApplication)).variables().containsEntry("check", true);
}

}

pvabu6sv

pvabu6sv1#

我找到了两个解决方案:
有点小毛病。如果测试中委托的user@mockbean。委托将被跳过,但您在处理进程引擎变量时遇到问题。
使用一个限定符创建两个bean,并使用概要文件进行测试和生产。我曾经为本地启动设置默认配置文件,为测试设置测试配置文件。

相关问题