首页 > 代码库 > Fitnesse Slim的使用

Fitnesse Slim的使用

官网上的使用说明:http://www.fitnesse.org/FitNesse.UserGuide.WritingAcceptanceTests.Slim

 

Fitnesse默认使用fit,如果要使用slim需要先声明

!define TEST_SYSTEM {slim}

 

1.Decision Table

表格

 

源码

package fitnesse.slim.test;

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() {

    return (pints == 0 && (dollars > 2 || creditCard)) ? "yes" : "no";

  }

  // The following functions are optional.  If they aren‘t declared they‘ll be ignored.

  public void execute() {

  }

  public void reset() {

  }

  public void table(List<List<String>> table) {

  }

  public void beginTable() {

  }

  public void endTable() {

  }

}

 

Table 的流程

1) 构建ShouldIBuyMilk的fixture

2) 调用table方法(如果存在)

3) 调用beginTable,(用来初始化)

4) 对于表格中的每一行的调用流程

  4.1)调用reset方法,以便进行准备和清除

  4.2)然后通过调用相应的set方法加载所有输入,输入按照从左到右的顺序加载

  4.3)调用execute方法

  4.4)最后调用输出的方法,比较表格中的期望值

5)调用endTable方法,清除和关闭你想要的东西

 

PS:表的第一行填的是类名,不分大小写,这是最基本最常用的表格

 

2.Dynamic Decision Table

表格

源码

public class AddUpChange {

  private Integer totalCents = 0;

  private static Map<String, Integer> COIN_VALUES = new HashMap<String, Integer>();

  static {

    COIN_VALUES.put("1c", 1);

    COIN_VALUES.put("5c", 5);

    COIN_VALUES.put("10c", 10);

    COIN_VALUES.put("25c", 25);

    COIN_VALUES.put("50c", 50);

    COIN_VALUES.put("$1", 100);

  }

  public void reset() {

    totalCents = 0;

  }

  public void set(String coin, Integer amount) {

    if (!COIN_VALUES.containsKey(coin)) {

      throw new IllegalArgumentException("Unknown coin type " + coin);

    }

    totalCents += amount * COIN_VALUES.get(coin);

  }

  public String get(String requestedValue) {

    if ("$ total".equals(requestedValue)) {

      return String.format(Locale.US, "%.2f", totalCents / 100.0);

    }

    return String.format("%d", totalCents);

  }

}

 

dynamic decision table 基本上和decision table的语法一致,除了需要在第一行中加入ddt

没有?的列,都会统一调用set(header,value)方法,有?的列都会统一调用get(header)方法,除此之外其他方法的调用都跟decision table一样(table, beginTable, reset, execute, endTable).

有#的列都是注释的内容

 

3.Query Table

表格

源码

package fitnesse.slim.test;

import java.util.Date;

import java.util.List; 

import static java.util.Arrays.asList;

 public class EmployeesHiredBefore {

  public EmployeesHiredBefore(Date date) {

  } 

  public void table(List<List<String>> table) {

    // optional function

  }

  public List<List<List<String>>> query() {

 

    return

      asList( // table level

        asList( // row level

          asList("company number", "4808147"), // cell column name, value

          asList("employee number", "1429"),

          asList("first name", "Bob"),

          asList("last name", "Martin"),

          asList("hire date", "10-Oct-1974")

        ),

        asList(

          asList("company number", "5123122"),

          asList("employee number", "8832"),

          asList("first name", "James"),

          asList("last name", "Grenning"),

          asList("hire date", "15-Dec-1979")

        )

      );

  }

}

 

第一行中需要加入Query,接下来就是构造函数的参数,每一行的标题就是字段名.Fixture类必须有一个query方法返回结果行,每一行都是由两个元素构成,一个就是字段名,另外一个就是对应的值(String类型)。从表格中的值从最左边开始匹配返回的结果,如果该行中的第一列不匹配,则该条记录是不匹配的,执行时候就查询失败

 

Fitnesse Slim的使用