决策表
Fitnesse中提供了好几种表格样式,前面说了,表格是执行测试的关键。从字面看,表格描述的是测试用例;从执行角度看,表格为后端的代码(fitnesse里称作fixture)提供了包名、类名、方法名和参数(仅以java为例)。
先说测试系统,fitnesse提供了两种测试系统:fit和slim。采用不同的测试系统,表格样式不同,代码也不同。所以首先就要确定用哪种。Fit是默认的,是从Framework for Integrated Test工具延续过来的。如果不考虑旧代码延用的问题,建议还是用slim。因为slim在性能上要更好,而且代码编写更简单。
使用slim需要在页面加一行说明:!define TEST_SYSTEM {slim} ,通常放在页顶端
下面就该描述执行代码所依赖的类或jar包了。格式一般这样写:
!pathD:\software\eclipse\workspaces\MyDemo\bin\ 或
!pathD:\software\eclipse\workspaces\MyDemo\libs\*.jar(如果不指定.jar,那就去找.class文件)
在去年的版本里还需要把fitnesse自身的jar包加上:!pathD:\software\fitnesse-standalone.jar ,但是今年的版本里,我发现已经不需要这句了。
决策表这个样式的:
my demo |
||
inputa |
inputb |
exp? |
1 |
2 |
3 |
8 |
9 |
17 |
这个my demo就是代码的类名了,大家知道在大多数编程语言里是不允许含有空格的标识符的。那么在代码里用my demo肯定是不行的。Fitnesse其实是这样做的——把每个单词首字母大写,然后连起来。所以对应于代码里的类名是MyDemo,这样一来,其实这里写成My Demo、My demo、MyDemo效果都是一样的。但写成mydemo就不行了,这只能被转换成Mydemo,我想我说明白了吧。对于类的全名(含包名),那就只能老老实实按正常写法了,比如:com.calis.zjc.MyDemo,不能有空格,否则再自动转成首字母大写就不对了。
下一行就是方法名了。Fitnesse是这样做的——凡不是以?结尾的,都认为是输入方法,无返回值,方法名是set+首字母大写字符串,也就是说,上面表格对应的方法名分别是:void setInputa(...) 、void setInputb(...);而以?结尾的列,则认为是验证方法,无参数有返回值。对应方法名是int exp()。何以见得返回值类型就是int呢,其实是不限定的。不论返回什么类型都可以和页面上的字符做比较,这点比较智能(我没有看到源代码,但我估计是拿到返回值再统统.toString(),之后和页面上的字符串做equals的)
综上所述:上面表格对应的代码为:
public class MyDemo { private int a,b; public void setInputa(int a){ this.a=a; } public void setInputb(int b){ this.b=b; } public int exp(){ return a+b; } }
当我们把此页面属性设置为test时,点击那个test按钮,系统就会去查找并加载这个类,然后运行相应的方法,也即:第一步setInputa(int a),a为1;第二步setInputb(int b),b为2;第三步exp取得返回值3和表格中的3做比较,一致,这行就是绿色的,不一致就是红色的;然后再做第二行......,这样就完成了两个测试用例的执行。(如果表格里填的不是整数,那么执行赋值方法会抛异常,这点也要注意)
再说一句,执行页面并非只能写表格。完全可以写其他文字,不影响执行结果。所以我们完全可以写一段需求说明,跟着一个表格做验证;再写一段使用说明,再跟写一个表格;描述一个缺陷,再跟一个表格......这样,这个页面就成了既是文档,又是可执行用例了。总之,让“文字”得以验证,是这个工具的亮点。