首页 > 代码库 > Fitnesse系列二

Fitnesse系列二

决策表

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做比较,一致,这行就是绿色的,不一致就是红色的;然后再做第二行......,这样就完成了两个测试用例的执行。(如果表格里填的不是整数,那么执行赋值方法会抛异常,这点也要注意)

再说一句,执行页面并非只能写表格。完全可以写其他文字,不影响执行结果。所以我们完全可以写一段需求说明,跟着一个表格做验证;再写一段使用说明,再跟写一个表格;描述一个缺陷,再跟一个表格......这样,这个页面就成了既是文档,又是可执行用例了。总之,让“文字”得以验证,是这个工具的亮点。

Fitnesse系列二