上一篇博文介绍了如何使用DVS Excel对规则集进行测试,在最后抛出一个问题:对年龄是18但是未设置性别的人员进行测试,测试结果输出为成年女性,这显然是不正确的,即我们的规则判断逻辑有漏洞,回顾一下我们性别检查的操作规则:
仔细观察一下上图的逻辑不难发现,以上规则遗漏了性别为空的情况(即将没有设置性别的人员默认设置为女性),这不符合所有的业务场景,有的朋友可能会说,再加一个判断就可以了:
再如果(else if) '人员'的性别 是 "female" 那么 设置'人员'的当前信息为"成年女性" ;否则(else) 设置'人员'的当前信息为"...",但是很遗憾,ODM不支持类似else if的判断,那怎么办?不用担心,我们用决策表来解决。
什么是决策表?大家只要记住,如果出现了类似需要多个if...else if....这样的判断逻辑的时候,您就应该考虑使用决策表了。
开始我们决策表的创建,点击规则项目"PersonRule",查看“规则项目图”,
点击“添加决策表”导航条目,
包选择“checkSex”,名称输入“性别检查决策表”,点击完成,此时,会自动打开新建的决策表编辑页面:
如图,默认的决策表有3列条件列,用来设置判断条件,一列操作列,用来定义对符合所有条件列的结果做出的操作,大家可以根据自己的实际业务需求在表头鼠标右键来删除或添加相应的列(类似Excel操作),在我的这个业务场景中,只是对性别进行判断,同时只是对人员的信息进行操作,所以,在这个决策表中,我只需要一个条件列和一个结果列,删除两个条件列之后如图,
双击条件列表头,
点击“<条件>”并配合快捷键“Ctrl+Shift+空格”调出词汇表,完成条件设置,将标题修改为“性别检查”,
点击“确定”,这样就完成条件列判断条件的设置,接下来设置值,分别为:"male","female","",
设置操作列操作,双击表头B,
使用词汇表编辑操作,将标题修改为“设置人员信息”,
点击“确认”按钮,完成操作语句的设置,
设置相应条件对应的操作,
这样就完成了决策表的编辑,是不是很简单?别忘记保存!
接下来我们将决策表加入到规则流中,使用上一篇博文介绍的DVS测试来对决策表进行测试。双击打开规则流编辑视图,
将“性别检查”操作规则删除,并将“性别检查决策表”拖拽进来,使用链接线连接好,
其他结构不用改变,规则流定义好了。
接下来,向测试方案中添加一条测试数据,打开测试方案文件,添加一条测试方案,
设置预期,
保存测试方案并关闭文件,执行测试,控制台输出如下,
再查看一下测试报告:
方案1,2执行完毕并且正确,
方案三报错了,结合日志中显示的那我们基本就可以确定问题出在哪了,
去查看一下决策表,并切换成IRL tab页进行显示
在此界面可以更好的看到单条规则是如何进行判断和执行的,这里便可以看出问题,规则的判断如下图:
此条判断语句要求人员的性别不能为空(null),否则会有空指针异常,问题找到了,去修改一下测试方案
打开测试方案,将新添加的测试人员中的性别修改为""(条件设置的也是""),保存并关闭测试方案文件,
再次运行测试,测试完成,并没有再报错,
查看测试报告,
方案1,2执行正确,新添加的人员性别为""的测试案例失败了,我们预期的是:当人员性别为""时,设置的人员信息应该是“未知性别成年人”,但是执行结果却将人员的信息设置成了null,这是为什么呢?
反过来再去看看我们设置对应这个逻辑的规则,
如上图,我并没有发现有什么问题,"".equals("") == true,的确没有问题,又做了多种尝试,均没有得到正确的结果,只能请教ODM支持人员,支持人员没有说这是什么原因造成的,只是建议在决策表中使用“否则”语句来处理这个问题,于是修改决策表,添加“否则”语句,让我们回到决策表(决策表视图而非IRL视图),并右键将我们设置的“人员性别为"",设置人员信息为“未知性别成年人””规则删除,
此时,只剩下了对male和female的判断,在条件的第2行,鼠标右键》添加》否则,将否则语句添加进条件列下,然后设置操列中的信息仍为“未知性别成年人”,
这条语句的意思为:除了上述的条件外,设置人员性别为“未知性别的成年人”,查看该条规则的执行语句(IRL视图),
再次进行测试,查看测试报告,
方案3也执行成功了,使用“否则”还有一个好处,排除了性别为null带来的报错问题。
此片博文到此就结束了,大家可以跟着以上的步骤尝试一下,我感觉犯一下上面提到的问题能让你更深刻的了解决策表和掌握更多的技巧。
后续还有更多精彩的内容更新,请大家持续关注哦!
如您有任何建议或意见,请留言或评论,我会在第一时间回复您!
欢迎转载,惠及他人,但请您注明出处!感谢!