Spring Zeebe and mocking a job worker


I am currently involved in the testing of processes with an embedded zeebe engine, using spring-zeebe-test. Testing the happy path using the original job workers is doing well, but I get problems when I try to mock a Job Worker in order to test some edge cases.

The original worker (a Spring Bean) follows this structure (simplified):

public class MyWorker {

    @ZeebeWorker(type = "myWorker")
    public void doSomething(final JobClient client, final ActivatedJob job) {

        if (specialCondition) {
            throw new ZeebeBpmnError("myErrorCode","Failure!");
        // ...some custom code goes here...

                .whenComplete((result, exception) -> {
                    if (exception != null) {
                        log.warn("Job completion failed: {}", exception.getMessage());
                    } else {
                        log.info("Job completion succeeded");

My test class looks like this (simplified as well):

public class MyTestClass {

    private ZeebeClient zeebeClient;

    private ZeebeTestEngine zeebeTestEngine;

    private MyWorker worker;

    void testEdgeCase() {
        ProcessInstanceEvent processInstance = zeebeClient.newCreateInstanceCommand()

         doThrow(new ZeebeBpmnError("myErrorCode","Failure!")).when(worker).doSomething(any(),any());

        BpmnAssert.assertThat(... checking several assertions ...);

I am getting an error:

org.awaitility.core.ConditionTimeoutException: Assertion condition defined as a io.camunda.zeebe.spring.test.ZeebeTestThreadSupport Process with key [...] was not completed within 5 seconds.

I am using Java 17, SpringBoot 2.7.1 and JUnit 5.

For now I have two questions:

  1. What am I doing wrong here? Is mocking the worker not the right approach?
  2. In the code shown above I’m using the @MockBean-Annotation in order to use the mocked worker instead of the original one. This is inconvenient if I want to use the original worker in other test methods of the same test class. It would be better if I could register the original worker or an appropriate mock with the zeebe test engine in each test method, depending on which case I want to test. How can I do that?

Thanks in advance for any help!