jbpm用户指南翻译:第18章 工作流TDD(测试驱动开发)
2006-11-10 23:54
615 查看
第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)
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)
相关文章推荐
- jBPM用户指南 第十八章 工作流TDD (转载)
- jbpm用户指南翻译:第16章 jBPM流程定义语言(JPDL)
- 你的项目TDD了吗? 有关测试驱动开发的一点想法
- XP中的TDD是什么?测试驱动开发?测试驱动设计?
- 测试驱动开发方法介绍及CPPUnit使用指南
- 工作流JBPM4.3中文版用户指南第三章(共八章)
- TDD(测试驱动开发)学习二:创建第一个TDD程序
- TDD(Test Driven Development)—测试驱动开发模式
- TDD测试驱动的javascript开发(3) ------ javascript的继承
- [翻译]使用PHPUnit进行测试驱动开发
- jBPM3.12用户指南中文翻译----第一章 绪论
- 测试驱动开发(TDD)实战小例子 (转)
- JBPM用户指南翻译:第13章 异步继续
- 测试驱动开发TDD(四)Google Test系列(目录)
- Android帮助文档翻译——开发指南(十五)获取用户位置
- 测试驱动开发指南
- jBPM3.12用户指南中文翻译----第一章 绪论
- 新Java运动:测试驱动开发3---用户注册2
- 什么是测试驱动开发?(TDD)
- 在PHP中使用Mockery进行测试驱动开发(TDD) - 上