如何在 Spring Boot 中编写集成测试来测试 Camunda 进程?
Camunda 流程中需要测试的任务也有调用方法进行 REST 调用的服务,这些需要进行模拟。
例如
@Slf4j
@Component
public class ProcessTaskDelegate implements JavaDelegate {
@Autowired
ProcessService processService;
@Override
public void execute(DelegateExecution delegateExecution) throws Exception {
String input = delegateExecution.getVariable("input");
String response = processService.doTask(input);
到目前为止,我已经使用mockMvc 来调用启动Camunda 进程的端点。然后我一直在尝试使用@MockBean来模拟必要的服务。
运行测试会产生不一致的结果,有时模拟会交互,有时则不会。我怀疑我的配置是否正确,或者这不起作用......
有更好的方法吗?
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class CamundaIT {
@Autowired
private MockMvc mvc;
@Autowired
ObjectMapper mapper;
@MockBean
private ProcessService processService;
@MockBean
private ProcessServiceTwo processServiceTwo;
private MyRequest request;
@Before
public void setup() throws Exception {
assert(mvc != null);
assert(mapper != null);
assert(processService != null);
assert(processServiceTwo != null);
request = TestHelper.generateRequest();
}
@Test
public void testCamundaProcess() throws Exception {
when(processService.doTask(anyString())).thenReturn(TestHelper.getResponse());
when(processServiceTwo.doAnotherTask(anyString())).thenReturn("Success");
mvc.perform(post("/process/initiate")
.contentType(MediaType.APPLICATION_JSON)
.content(mapper.writeValueAsString(request))
.andExpect(status().isOk());
verify(processService).doTask(anyString());
verify(processServiceTwo).doAnotherTask(anyString());
}
如果您使用的是 Camunda 8,Camunda 文档中有一个部分介绍如何使用 Camunda Process Test (CPT)(一个用于测试 BPMN 流程和流程应用程序的 Java 库)编写流程测试。
它使用 JUnit 而不是 mockMvc,但它有详细的示例说明如何测试流程的所有部分。