Table 表
基本上这一节就是文档翻译,不打算写示例了,原因结尾会说。
Table表的意思是你可以写出任意样式的表格来。那么任意样式的表格是如何被fitnesse识别并执行的?以及如何展示执行结果的?一起来看一下。
前面几种表格的基本思路是——要么由表头来确定方法名(决策表);要么固定方法名(动态决策表、查询表);要么结合某些标识符确定方法名(脚本表)。总之给人有迹可循的印象,而Table表要换个思路——没有表头,也不用纠结于那个数传给了哪个变量。唯一必须有的方法名称是List doTable(List<List<String>>)。可以看出输入参数是一个两级List,其实就是表格内容啦。里面一级List是某一行中的元素,都是字符串形式传过去的;外面一级List就是多个行了。返回值其实也是一个两级List,只不过简写了。写成这样就更精确了——List<List<String>>
doTable(List<List<String>> table)。返回的List的结构也是一样的,各个行、行中的各个元素。元素也是字符串形式,内容如下:
pass——表示通过
pass:<message>——通过且带信息
...不一一列举了,参考文档的说明
可以看出,在这个方法里我们要全面负责输入和输出,针对输入List中的内容做出判断和处理,再写到一个输出List里。这也意味着fixture相对灵活与复杂。
结果展示是这样的:把这个返回的“表格”(二级列表)中的元素和原始“表格”进行“逐格叠加”。当输出字符是pass,就把输入表的这个“格”变绿显示,如果是pass:message,就变绿且附加message显示,如果是fail,就变红显示,如果是空字符串,就黑色原始值显示,如果是没有标记的普通字符串,就替换原来的内容并且红色......
如果返回“表格”的大小、长短和输入表格不同,那么“叠加”会发生什么。fitnesse已经考虑到了这点——如果结果短了,后面就不管了,原样显示;如果结果长了,就附加显示出来
综上所述,Table表是一种最灵活的表示。但我个人相当不建议使用这种,除非从之前介绍的表格中找不到合适的。原因是这种代码写起来会比较复杂且通用性极差。我对复杂的东西有天然的抵触心理。有人说程序员分两种,一种是把简单的事情考虑的很复杂,一种是把复杂的事情考虑的尽量简单。毫无疑问我是后面这种。我所有的文章都是在尽量用最简单的方法来阐述事情。