测试你的工作流

原创 2005年05月27日 19:59:00

现在我们已经完成了一个完整的工作流定义,下一步是检验它是否按照我们预想的方式执行。

在一个快速开发环境中,最简单的方法就是写一个测试案例。通过测试案例调用工作流,根据校验结果和捕捉可能发生的错误,来保证流程定义的正确性。

我们假设你已经熟悉Junit和了解怎样编写测试案例。如果你对这些知识还不了解的话,可以去JUnit的网站查找、阅读相关文档。编写测试案例会成为你的一个非常有用的工具。

在开始载入流程定义、调用动作以前,我们需要配置OSWorkflow的数据存储方式和定义文件的位置等。

h3 配置 osworkflow.xml

我们需要创建的第一个文件是 osworkflow.xml。下面是一个简单的例子:
<osworkflow>
  <persistence class="com.opensymphony.workflow.spi.memory.MemoryWorkflowStore"/>
  <factory class="com.opensymphony.workflow.loader.XMLWorkflowFactory">
    <property key="resource" value="workflows.xml" />
  </factory> 
</osworkflow>

这个例子指明了我们准备使用内存 (MemoryWorkflowStore) 来保存流程数据。这样可以减少设置数据库的相关信息,减少出问题的可能性。用内存持久化对于测试来说是非常方便的。

h3 Workflow factories

上面的配置文件还指明了我们工作流工厂(XMLWorkflowFactory),工作流工厂的主要功能是管理流程定义文件,包括读取定义文件和修改定义文件的功能。通过'resource'这个属性指明了采用通过从classpath中读取流程定义文件的方式,按照这个定义,接下来我们需要在classpath中创建一个名为workflows.xml的文件。

workflows.xml 的内容:
<workflows>
  <workflow name="mytest" type="resource" location="myworkflow.xml"/>
</workflows>

我们把 myworkflow.xml 和workflows.xml放在同一目录,这样它就能够被工作流工厂读取了。

这样就完成了配置,接下来是初始化一个流程并调用它。

h3 Initialising OSWorkflow

OSWorkflow 的调用模式相当简单:通过一个主要的接口来执行大部分操作。这个接口就是 Workflow interface,及其扩展 AbstractWorkflow 的实现,例如EJBWorkflow 和 SOAPWorkflow. 为了简单起见,我们使用最基本的一种: BasicWorkflow。

首先,我们来创建Workflow。在实际项目中,这个对象应该被放在一个全局的位置上以供重用,因为每次都创建一个新的Workflow对象是需要耗费比较昂贵的系统资源。在这里的例子,我们采用BasicWorkflow,它的构建器由一个当前调用者的用户名构成,当然我们很少看到单用户的工作流应用,可以参考其他的Workflow实现有不同的方式去获得当前调用者。

为了简单起见,我们采用BasicWorkflow来创建一个单一的用户模式,避免编写其他获取用户方法的麻烦。

这样我们来创建一个'testuser'调用的workflow:

Workflow workflow = new BasicWorkflow("testuser");

下一步是提供配置文件,在大多数情况下,只是简单的传递一个DefaultConfiguration实例:

DefaultConfiguration config = new DefaultConfiguration();
workflow.setConfiguration(config);

现在我们已经创建并且配置好了一个workflow,接下来就是开始调用它了。
h3 启动和进行一个工作流程

首先我们需要调用initialize 方法来启动一个工作流程,这个方法有3个参数,workflow name (定义在workflows.xml里,通过workflow factory处理), action ID (我们要调用的初始化动作的ID),和初始化变量。 因为在例子里面不需初始化变量,所以我们只是传递一个null,
long workflowId = workflow.initialize("mytest", 1, null);

我们现在已经有了一个工作流实例,返回的workflowId可以在后续的操作中来代表这个实例。这个参数会在Workflow interface的绝大部分方法中用到。

h4 检验工作流

现在让我们来检验启动的工作流实例是否按照我们所预期的那样运行。根据流程定义,我们期望的当前步骤是第一步,而且应该可以执行第一个动作(开始编写草稿)。

Collection currentSteps = workflow.getCurrentSteps(workflowId);
//校验只有一个当前步骤
assertEquals("Unexpected number of current steps", 1, currentSteps.size());
//校验这个步骤是1
Step currentStep = (Step)currentSteps.iterator().next();
assertEquals("Unexpected current step", 1, currentStep.getStepId());

int[] availableActions = workflow.getAvailableActions(workflowId);
//校验只有一个可执行的动作
assertEquals("Unexpected number of available actions", 1, availableActions.length);
//校验这个步骤是1
assertEquals("Unexpected available action", 1, availableActions[0]);

h4 执行动作

现在已经校验完了工作流实例正如我们所期望的到了第一个步骤,让我们来开始执行第一个动作:
workflow.doAction(workflowId, 1, null);

这是简单的调用第一个动作,工作流引擎根据指定的条件,改变状态到‘Underway’,并且保持在当前步骤。

现在我们可以类似地调用第2个动作,它所需要的条件已经都满足了。

在调用完第2个动作以后,根据流程定义就没有可用的动作了,getAvailableActions将会返回一个空数组。

Congratulations, 你已经完成了一个工作流定义并且成功地调用了它。下一节我们将会讲解osworkflow一些更深入的概念。

C#写的工作流测试实例

  • 2009年11月25日 15:42
  • 8KB
  • 下载

SharePoint2010状态机工作流测试

  • 2014年09月22日 02:10
  • 62KB
  • 下载

Activiti 工作流 流程定义的删除 04

流程定义设计到的表 select * from act_re_procdef /** * 删除流程定义 */ @Test public vo...

关于工作流的测试用例纲要

  • 2010年09月20日 10:34
  • 652KB
  • 下载

activit-5.22 工作流源码

  • 2017年12月07日 22:58
  • 20.86MB
  • 下载

工作流jbpm4的学习笔记5

转载来自:http://blog.csdn.net/ycjunhua/article/details/5980469 5.使用jbpm Service API 控制流程  流程运行模式...
  • wymrdjm
  • wymrdjm
  • 2017年12月11日 20:58
  • 63

activit5.22工作流 web流程设计器

  • 2017年12月07日 21:03
  • 42.69MB
  • 下载

工作流的设计详细方案

  • 2017年12月07日 10:55
  • 323KB
  • 下载

通达OA2015-工作流表单导Excel模板后下载

工作流有时需要在某个步骤时按EXCEL模板导出,需要用到PHPExcel和jQuery,具体实现如下 一、表单界面生成按钮【正式报价单】,如下图 二、点按钮时的javascript脚本 ...

工作流activity5.22

  • 2017年11月30日 13:05
  • 90.57MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:测试你的工作流
举报原因:
原因补充:

(最多只允许输入30个字)