【问题标题】:bpmn - simple test for JavaDelegate implementationbpmn - JavaDelegate 实现的简单测试
【发布时间】:2019-02-13 14:40:08
【问题描述】:

我已经实现了一个简单的 JavaDelegate 作为我的 BPMN 流程的任务:

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 的实现。 这里有什么 dummy-impl 可以使用吗?如何尽可能简单地测试这个?

我不会启动进程实例来测试此代码。谷歌没有想出一些有用的东西。

【问题讨论】:

    标签: java unit-testing delegates bpmn camunda


    【解决方案1】:

    DelegateExecution 是一个接口,所以你可以自己实现。但更好的选择是使用像 mockito 这样的模拟库,它允许您只模拟您感兴趣的方法调用。

    import static org.mockito.Mockito.*;
    ...
    
    DelegateExecution mockExecution = mock(DelegateExecution.class);
    doReturn("printJobId").when(mockExecution).getVariable(eq("VIP-Variable"));
    cleanupVariables.execute(mockExecution);
    

    这是一个使用 mockito 进行模拟的教程:https://www.baeldung.com/mockito-series

    或者你可以使用这个包中的DelegateExecutionFake

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

    但我无法提供帮助,因为我从未使用过它。

    【讨论】:

    • 在我看来,在给定的测试用例中模拟这个对象是错误的。如果我这样做,测试只会测试我是否正确地模拟了所有内容。很遗憾,camunda 没有提供这个接口的一些虚拟实现。
    • 我不认为这是错误的,在单元测试中,您只想在可能的情况下测试单个类。但我发现一些可能有帮助的包。我自己不使用它,但也许它可以满足您的需求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    • 2019-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多