jBPM用户指南 第十八章 工作流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

相关文章

迭代器模式(Iterator)迭代器模式(Iterator)[Cursor]意图...
高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,...
策略模式(Strategy)策略模式(Strategy)[Policy]意图:定...
访问者模式(Visitor)访问者模式(Visitor)意图:表示一个...
命令模式(Command)命令模式(Command)[Action/Transactio...
生成器模式(Builder)生成器模式(Builder)意图:将一个对...