如何解决Сamunda 替换测试中外部任务的行为
我创建了简单的 Camunda spring boot 项目,并使用切换器创建了 simple BPMN process。 (5.5 KB)
我使用具有外部实现的服务任务作为 spring bean。我想为进程编写测试,但我不想测试 bean 的工作原理。因为通常我使用外部实现连接到数据库并将参数保存到上下文或对内部应用程序的 REST 调用。例如,我想跳过执行服务任务(一个),而是为切换器设置变量。我尝试使用camunda-bpm-assert-scenario进行测试过程并编写了简单的测试WorkflowTest。
我注意到如果我对 One.class 使用 @MockBean,那么 Camunda 会跳过委托执行。如果使用@Mock,则Camunda 执行委托执行。
PS 抱歉英语不好
@服务 公共类一实现 JavaDelegate { 私人最终随机随机=新随机();
@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);
}
}
解决方法
我找到了两个解决方案:
-
这是一个小技巧。如果用户@MockBean 用于测试中的委托。委托将被跳过,但您在使用流程引擎变量时遇到问题。
-
用一个限定符创建两个 bean,并使用配置文件进行测试和生产。我曾经默认本地启动配置文件和测试配置文件进行测试。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。