java - bpmn - JavaDelegate 实现的简单测试
问题描述
我已经实现了一个简单的 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 可以使用吗?如何尽可能简单地测试这个?
我不会启动一个进程实例来测试这段代码。谷歌没有想出一些有用的东西。
解决方案
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>
但我无能为力,因为我从未使用过它。
推荐阅读
- java - 用于扩展 Grpc 服务器以阻止调用的配置
- javascript - 如何用“let”和“const”替换此代码中的“var”关键字?
- angular - amcharts 堆叠条形图 - 突出显示值(更改 alpha)以响应事件
- python - 再次单击时如何将按钮颜色更改回原始颜色
- php - GeoIP 显示实际代码而不是来自数据库的结果
- java - 如何为从包含用户 ID 的文件中提取登录详细信息的测试实现多用户登录
- javascript - 在summernote中添加动态自定义按钮作为数组
- ruby-on-rails - 如何添加自定义设计字段/访问设计默认控制器
- javascript - jQuery - 在 HTML PRE 中过滤 JSON 数组
- javascript - TypeError:无法读取未定义的属性“替换” - VueJS