当前位置: 代码迷 >> java >> bpmn-JavaDelegate实现的简单测试
  详细解决方案

bpmn-JavaDelegate实现的简单测试

热度:48   发布时间:2023-07-31 11:02:20.0

我已经将Simple JavaDelegate实现为BPMN-Process的任务:

public class CleanupVariables implements JavaDelegate {

    @Override
    public void execute(DelegateExecution execution) throws Exception {
        String printJobId = execution.getVariable("VIP-Variable").toString();

        // remove all variables
        execution.removeVariables();

        // set variable
        execution.setVariable("VIP-Variable", printJobId);
    }
}

现在,我想编写一个单元测试。

 @Test
    public void testRemove() throws Exception {
        // Arrange
        CleanupVariables cleanupVariables = new CleanupVariables();

        testdelegate.setVariable("VIP-Variable", "12345");
        testdelegate.setVariable("foo", "bar");

        // Act
        cleanupVariables.execute(????); // FIXME what to insert here?

        // Assert
        Assertions.assertThat(testdelegate.getVariables().size()).isEqualTo(1);
        Assertions.assertThat(testdelegate.getVariable("VIP-Variable")).isEqualTo("12345");

    }

我无法弄清楚如何在我的行动步骤中插入DelegateExecution一些实现。 这里有没有要使用的哑剧? 如何测试尽可能简单?

我不会启动用于测试此代码的processinstance。 Google没有提出一些有用的东西。

DelegateExecution是一个接口,因此您可以实现自己的接口。 但是更好的选择是使用诸如嘲笑之类的嘲笑库,它允许您仅模拟您感兴趣的方法调用。

import static org.mockito.Mockito.*;
...

DelegateExecution mockExecution = mock(DelegateExecution.class);
doReturn("printJobId").when(mockExecution).getVariable(eq("VIP-Variable"));
cleanupVariables.execute(mockExecution);

这是一个使用mockito进行模拟的教程: :

或者,您可以使用此程序包中的DelegateExecutionFake

    <dependency>
        <groupId>org.camunda.bpm.extension.mockito</groupId>
        <artifactId>camunda-bpm-mockito</artifactId>
        <version>3.1.0</version>
        <scope>test</scope>
    </dependency>

但由于我从未使用过它,所以我对此无能为力。