本篇将重点介绍Fitnesse测试引擎slim, slim是(simple list Invocation method)的缩写,使用来代替的fit的测试引擎,不同于fit的是,slim将html的解析,比较以及颜色的改变都放在了fitnesse上面去完成,而不是像fit一样放在被测系统这一端去完成,slim是一个自定义的协议,是一个准RPC协议,通过此协议fitnesse可以驱动被测系统的方法。


其中核心的包是fitnesse.slim此包为slim协议的核心,fitnesse.slim.converters此包为slim中变量参数转换器以及fitnesse.slimTables此包为slim中表格类型。
如果我们要使用slim作为测试引擎,那么必须在wiki页面上定义测试类型
!define TEST_SYSTEM {slim}
slim本身总共包括10种表格类型,首先介绍decision table:
我们经常使用decision table作为一个真假表

该测试用例对应的测试代码如下所示:
public class ShouldIBuyMilk {
private int dollars;
private int pints;
private boolean creditCard;

public void setCashInWallet(int dollars) {
this.dollars = dollars;
}

public void setPintsOfMilkRemaining(int pints) {
this.pints = pints;
}

public void setCreditCard(String valid) {
creditCard = "yes".equals(valid);
}

public String goToStore() {
(pints == 0 && (dollars > 2 || creditCard)) ? "yes" : "no";
}
首先看表格的第一行should I buy milk对应测试代码ShouldIBuyMilk测试类,再看表格第二行第一列cash in wallet对应测试代码setCashInWallet方法,第二列credit card对应测试代码setCreditCard,以此类推后面几列,我们看到最后一列有点比前面几列多了一个?号,这个问号表示最后一列是一个方法,也就是我们需要得到的结果,前面几列表示参数,所以他们需要在测试代码中加上set。从表格的第三行开始就是我们的测试用例参数,总共8个测试用例在一张decision表格中就全部描述完成,当我们点击Test按钮就可以得到以下结果:


我们可以看到从第三行开始绿色的表示通过的case,红色的表示失败的case并且会有实际值显示出来,这样我们在一次执行中就完成了8个case的执行。下一节中我会重点剖析decision表格的源码结构。