继承了ActivitiTestCase, 可以在测试方法上使用org.activiti.engine.test.Deployment注解.测试执行前,与测试类在同一个包下的,格式为testClassName.testMethod.bpmn20.xml的资源文件,会被部署.测试结束后,发布包也会被删除,包括所有相关的流程实例,任务...Deployment注解也可以直接设置资源的位置
public class MyBusinessProcessTest extends ActivitiTestCase { @Deployment public void testSimpleProcess() { runtimeService.startProcessInstanceByKey("simpleProcess"); Task task = taskService.createTaskQuery().singleResult(); assertEquals("My Task", task.getName()); taskService.complete(task.getId()); assertEquals(0, runtimeService.createProcessInstanceQuery().count()); } }要想在使用JUnit 4编写单元测试时获得同样的功能
可以使用org.activiti.engine.test.ActivitiRule. 通过它,可以通过getter方法获得流程引擎和各种服务
使用这个Rule也会启用org.activiti.engine.test.Deployment注解
它会在classpath下查找默认的配置文件,如果配置文件相同的话,对应的流程引擎会被静态缓存,就可以用于多个单元测试
public class MyBusinessProcessTest { @Rule public ActivitiRule activitiRule = new ActivitiRule(); @Test @Deployment public void ruleUsageExample() { RuntimeService runtimeService = activitiRule.getRuntimeService(); runtimeService.startProcessInstanceByKey("ruleUsage"); TaskService taskService = activitiRule.getTaskService(); Task task = taskService.createTaskQuery().singleResult(); assertEquals("My Task", task.getName()); taskService.complete(task.getId()); assertEquals(0, runtimeService.createProcessInstanceQuery().count()); } } 调试单元测试使用内存数据库H2进行单元测试,在调试环境监视Activiti的数据库:
在单元测试里设置了一个断点:
用调试模式运行单元测试,右击单元测试,选择[运行为]和[单元测试],测试会停在我们的断点上, 然后我们就可以监视测试的变量,它们显示在调试面板里
要监视Activiti的数据,打开[显示]窗口(如果找不到,打开[窗口]-[显示视图]-[其他],选择[显示]并点击[代码已完成],org.h2.tools.Server.createWebServer("-web").start()
选择你点击的行,右击.然后选择[显示]
打开一个浏览器,输入:8082, 输入内存数据库的JDBC URL(默认为jdbc:h2:mem:activiti),点击连接按钮
可以看到Activiti的数据,通过它们可以了解单元测试时,如何以及为什么这样运行的
ProcessEngine是线程安全的,可以在多线程下共享
在web应用中, 意味着可以在容器启动时创建流程引擎, 在容器关闭时关闭流程引擎