Fitnesse - Slim Tables
Fitnesse - Slim Tables
2017-09-28
目录
1 什么是Wiki Word?
2 Query Table
2.1 Query Table的格式
2.2 源代码
3 Script Table
3.1 Script Table格式
3.2 源代码
1 什么是Wiki Word?
wiki单词( WikiWord)的语法是驼峰式:小写字母和小写字母的交替模式。第一个字母大写后面跟小写字母或数字,这算一个驼峰,两个及以上驼峰成为wiki单词。
正则表达式如下:
\b[A-Z](?:[a-z0-9]+[A-Z][a-z0-9]*)+
Java类的命名规则是驼峰式的,所有在是用的时候,需要在wikipage中做些修改,防止被fitnesse解释。修改有两种方式:
- 一种是Literal Text:
如下2.2 QueryTable调用的类名为EmpoyeesHiredBefore,在2.1中调用是可以写成:
!-Query:EmpoyeesHiredBefore-!
- 另一种是每个驼峰以空格相隔且首字母小写
正如2.1中的格式:
Query:employees hired before
2 Query Table
2.1 Query Table的格式
| Query:employees hired before | 10-Dec-1980 | |||
| company number | employee number | first name | last name | hire date |
| 4808147 | 9942 | Bill | Mitchell | 19-Dec-1966 |
| 4808147 | 1429 | Bob | Martin | 10-Oct-1975 |
也可以让单元为空,测试是会自动填上:
| Query:employees hired before | 10-Dec-1980 | ||
| employee number | first name | last name | hire date |
| 1429 | |||
| 8832 | |||
2.2 源代码
package util; 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")
)
);
}
}

图1 测试结果
说明:
- Query Table的第一行,第一列单元格:前缀Query:+类名EmployeesHiredBefore,后面的单元格式构造函数的参数。
- QueryTable类必须有一个query方法返回结果行,每一行都是由两个元素构成,一个就是字段名,另外一个就是对应的值(String类型)。
- 从表格中的值从最左边开始匹配返回的结果,如果该行中的第一列不匹配,则该条记录是不匹配的,执行时候就查询失败。
3 Script Table
3.1 Script Table格式
| script | login dialog driver | Bob | xyzzy | |
| login with username | Bob | and password | xyzzy | |
| check | login message | Bob logged in. | ||
| reject | login with username | Bob | and password | bad password |
| check | login message | Bob not logged in. | ||
| check not | login message | Bob logged in. | ||
| ensure | login with username | Bob | and password | xyzzy |
| note | this is a comment | |||
| show | number of login attempts | |||
| $symbol= | login message | |||
3.2 源代码
public class LoginDialogDriver {
private String userName;
private String password;
private String message;
private int loginAttempts;
public LoginDialogDriver(String userName, String password) {
this.userName = userName;
this.password = password;
}
public boolean loginWithUsernameAndPassword(String userName, String password) {
loginAttempts++;
boolean result = this.userName.equals(userName) && this.password.equals(password);
if (result)
message = String.format("%s logged in.", this.userName);
else
message = String.format("%s not logged in.", this.userName);
return result;
}
public String loginMessage() {
return message;
}
public int numberOfLoginAttempts() {
return loginAttempts;
}
}

图1 测试结果
说明:
很明显,这个表中每一行都是一条指令。
| Script:login dialog driver | Bob | xyzzy |
第一行Script后面跟的是类名LoginDialogDriver和构造函数的参数Bob,xyzzy,这一行称之为actor,如果table中没有actor,就沿用上一个table的actor。
Script table 调用方法可以插入式调用,即方法和参数是相间的,如下所示:
| login with username | Bob | and password | xyzzy |
也可以连续调用,可以在单元格方法名后面添加分号,然后紧接的单元格都是入参,如下所示:
| login with username and password; | Bob | xyzzy |
- 一行中如果只包含一个方法名,那么只有它返回的是布尔值,才会执行的时候变成绿色或者红色,其他情况不会有颜色
- 如果一个变量在第一个单元格,则它后面应该跟的是方法名,该变量的值就是方法返回的值
- 如果第一个单元格是check,则它后面应该跟的是方法名,最后一个单元格就是期望值
- 如果第一个单元格是check not,则它后面跟的是方法名,最后一个单元格就是不希望的期望值
- 如果第一个单元格是ensure,则它后面跟的是方法名,返回的布尔值如果是true就变成绿色,如果是false就变成红色
- 如果第一个单元格是reject,则它后面跟的是方法名,返回的布尔值如果是false就变成绿色,返回的布尔值如果是true就变成红色
- 如果第一个单元格是note,则在执行的时候就会忽略(空格,以#或者*开头的都是这种效果)
- 如果第一个单元格是show,则它后面跟的是方法名,当这个测试运行的时候,一个新的单元格将会被添加,显示的是该方法的返回值
- 如果第一个单元格是start,它后面跟的应该是一个新的类名和构造函数的参数,会开始一个新的actor,覆盖上面的,它下面的script都会沿用该actor
Fitnesse - Slim Tables的更多相关文章
- Fitnesse Slim的使用
官网上的使用说明:http://www.fitnesse.org/FitNesse.UserGuide.WritingAcceptanceTests.Slim 本文主要介绍Slim常用的几种表格,更多 ...
- Fitnesse-The Slim Tables
Fitnesse 中Slim支持的表格类型 下表内容路径 Decision Table Supplies the inputs and outputs for decisions. This is s ...
- fitnesse - 一个简单的例子(slim)
fitnesse - 一个简单的例子(slim) 2017-09-30 目录1 编写测试代码(Fixture code)2 编写wiki page并运行 2.1 新建wikiPage 2.2 运行 ...
- 扩展Fitnesse的ScriptTable:支持if-then
Fitnesse的ScriptTable只能顺序执行所有行,本博文介绍如何让ScriptTable支持if-then,来条件执行一行. 首先普及一下概念,什么是Fitnesse,听一听.NET版Cuc ...
- 介绍并扩展Fitnesse的测试模块化机制:ScenarioTable
摘要:在验收测试框架Fitneese中,使用Scenario可以把最常用的测试步骤封装起来,从而达到模块化定义Fitnesse测试用例的能力.但Scenario仅限于封装Script测试步骤,Scri ...
- Fitnesse在eclipse中的调试
需要在Fitnesse的wik中添加: '''此句话专门用来Debug'''!define COMMAND_PATTERN {java -Xdebug -Xrunjdwp:transport=dt_s ...
- 初试FitNesse
1.下载fitnesse-standalone.jar 2.在cmd中输入,开启fitnesse server 3.在浏览器中输入: 4.编写代码: package fitnesse.slim.tes ...
- fitnesse - Variables and Symbols
fitnesse - Variables and Symbols 2017-09-30 目录 1 Variables(静态变量) 1.1 定义及使用 1.2 Variable作用域 1.2. ...
- osm2pgsql导入duplicate key error in slim mode
This is a well known issue and one that is likely not going to be addressed any time soon. While the ...
随机推荐
- JavaScript面向对象(二)——成员属性、静态属性、原型属性与JS原型链
前 言 JRedu 上一篇博客中,我们介绍了JS中的面向对象,并详细的解释了this的指向问题.本篇博客,我们继续来学习JS的面向对象.来深入理解一下JavaScript OOP中的成员属性/方 ...
- 页面性能优化和高频dom操作
一.DOM操作影响页面性能的核心问题 通过js操作DOM的代价很高,影响页面性能的主要问题有如下几点: 访问和修改DOM元素 修改DOM元素的样式,导致重绘或重排 通过对DOM元素的事件处理,完成与用 ...
- 使用TCP/IP Monitor监视Soap协议
什么是soap? soap,简单对象访问协议,基于http传输xml数据,soap协议体是xml格式. SOAP 是一种网络通信协议 SOAP即Simple Object Access Protoco ...
- MySQL的JOIN(三):JOIN优化实践之内循环的次数
这篇博文讲述如何优化内循环的次数.内循环的次数受驱动表的记录数所影响,驱动表记录数越多,内循环就越多,连接效率就越低下,所以尽量用小表驱动大表.先插入测试数据. CREATE TABLE t1 ( i ...
- Java+大数据开发——Hadoop集群环境搭建(二)
1. MAPREDUCE使用 mapreduce是hadoop中的分布式运算编程框架,只要按照其编程规范,只需要编写少量的业务逻辑代码即可实现一个强大的海量数据并发处理程序 2. Demo开发--wo ...
- Java GC 日志详解
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt105 java GC日志可以通过 +PrintGCDetails开启 以Pa ...
- 锤子坚果pro突破京东10万好评,还有什么是锤子科技做不出...
作为2017年手机圈明星产品的锤子科技坚果Pro,可是一点都不安分呢! 9月份锤子科技推出一款新机型--坚果Pro银魂定制版 这在动漫圈跟手机圈都掀起一股不小的浪潮. 外观漂亮,颜值超高,续航时间长. ...
- 后台方庄List razor 循环
后台: //1.查询所有年卡类型 StringBuilder sqlStr = new StringBuilder(); sqlStr.Ap ...
- CCNA基础知识摘录
cisco设备的启动要点: 1.检测硬件(保存在rom) 2.载入软件(IOS)(保存在Flash) 3.调入配置文件(密码,IP地址,路由协议都保存在此)(此文件保存在NVRAM) 0x2102:正 ...
- 【集美大学1411_助教博客】团队作业1——团队展示&选题 成绩
第一次团队作业已经新鲜出炉啦,各位同学请查收.截止日期前,全班都按时提交了作业,而且有的团队还提交了两次呢,下次不要这样啦~ 题目 团队作业1--团队展示&选题 回顾 个人作业1--四则运算题 ...