jBPM用户指南 第十八章 工作流TDD (转载)

前端之家收集整理的这篇文章主要介绍了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 原文链接:https://www.f2er.com/javaschema/288085.html

猜你在找的设计模式相关文章