jbpm用户指南翻译:第18章 工作流TDD(测试驱动开发)

 
第18章 工作流TDD(测试驱动开发)
18.1 工作流TDD简介
因为面向流程的软件开发与其它软件没有什么不同,所以我们认为流程定义应该可以被容易的测试。本章将向你展示怎样用平常的JUnit对所创建的流程定义进行单元测试,而不需要做任何扩展。
开发周期应该尽可能的短,对软件源码的修改应该立即被验证,最好没有任何中间的构造步骤。下面的示例将向你展示怎样开发和测试jBPM流程而没有中间步骤。
通常流程定义的单元测试是执行一个场景,每个场景在JUnit的测试方法中被执行,并且将外部的触发(请阅读:信号,即signal)传回到流程执行中,然后在每个信号之后验证流程是否处于所预期的状态。
让我们看这样一个测试例子,我们使用拍卖流程的一个简化版本,如下图形表示:
图 18. 1拍卖测试流程
现在,让我们写一个执行主场景的测试:
public class AuctionTest extends TestCase {
 
 // 解析流程定义
 static ProcessDefinition auctionProcess =
      ProcessDefinition.parseParResource("org/jbpm/tdd/auction.par");
 
 // 获取节点,用于以后的断言
 static StartState start = auctionProcess.getStartState();
 static State auction = (State) auctionProcess.getNode("auction");
 static EndState end = (EndState) auctionProcess.getNode("end");
 
 // 流程实例
 ProcessInstance processInstance;
 
 // 执行主路径
 Token token;
 
 public void setUp() {
    // 为给定的流程定义创建一个新的流程实例
    processInstance = new ProcessInstance(auctionProcess);
 
    // 执行的主路径为根令牌
    token = processInstance.getRootToken();
 }
 
 public void testMainScenario() {
    // 流程实例创建后,执行主路径位于开始状态
    assertSame(start, token.getNode());
   
    token.signal();
   
    // 信号后,执行主路径转移到aution状态
    assertSame(auction, token.getNode());
   
    token.signal();
   
    // 信号后,执行主路径移到结束状态,且流程结束
    assertSame(end, token.getNode());
    assertTrue(processInstance.hasEnded());
 }
}
 
18.2 XML源
在开始写执行场景之前,你需要一个流程定义,获取一个流程定义对象最简单的方式是通过解析xml。如果你的编写环境有代码完成(code completion)功能,键入ProcessDefinition.parse并激活代码完成功能,然后你会获得多个解析方法,主要有三种方式去编写可被解析到一个ProcessDefinition对象的xml:
18.2.1 解析流程档案
流程档案是一个zip文件,它包含一个有流程XML置于其中的名为processdefinition.xml的文件,jBPM流程设计器读取和编写流程档案。例如:
...
static ProcessDefinition auctionProcess =
    ProcessDefinition.parseParResource("org/jbpm/tdd/auction.par");
...
 
18.2.2 解析xml文件
在其它情况下,你可能手工写processdefinition.xml文件,然后使用如ant脚本方式来打包zip文件。这种情况下,你可以使用JpdlXmlReader。
...
static ProcessDefinition auctionProcess =
    ProcessDefinition.parseXmlResource("org/jbpm/tdd/auction.xml");
...
 
18.2.3 解析xml字符串
最简单的选择是在单元测试中从一个普通字符串解析xml。
...
static ProcessDefinition auctionProcess =
    ProcessDefinition.parseXmlString(
 "<process-definition>" +
 " <start-state name='start'>" +
 "    <transition to='auction'/>" +
 " </start-state>" +
 " <state name='auction'>" +
 "    <transition to='end'/>" +
 " </state>" +
 " <end-state name='end'/>" +
 "</process-definition>");
...
 
18.3 测试子流程
TODO (请看 test/java/org/jbpm/graph/exe/ProcessStateTest.java  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值