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 ...
随机推荐
- 常用Dos操作指令
1 dir 无参数:查看当前所在目录的文件和文件夹. /s:查看当前目录已经其所有子目录的文件和文件夹. /a:查看包括隐含文件的所有文件. /ah:只显示出隐含文件. /w:以紧凑方式(一行显示5个 ...
- 搭建DNS服务
author:JevonWei 版权声明:原创作品 修改/var/named/下的数据库文件的数据时,需手动修改serial序列号 UDP协议53端口用于用户DNS查询,TCP协议53端口用于主从DN ...
- CountDownLatch与CyclicBarrier
对于AbstractQueuedSynchronizer衍生出来的并发工具类,这一篇再介绍俩. 场景1:有4个大文件的数据需要统计,最终将所有的统计结果进行加工,得到最后的分析数据.为了加速处理过程, ...
- poj 3613 floyd + 快速幂
题意:本题的大意就是问从S 到 T 经过边得个数恰为k的最短路是多少. 思路:对于邻接矩阵每一次floyd求的是每个点间的最短距离,则n次floyd就是每个点间n条路的最短距离(可以重复边); 但是由 ...
- 再起航,我的学习笔记之JavaScript设计模式21(命令模式)
命令模式 概念描述 命令模式(Command): 将请求与实现解耦并封装成独立的对象,从而使不同的请求对客户端的实现参数化 示例代码 命令模式我们可以看成是将创建模块的逻辑封装在一个对象里,这个对象提 ...
- 【Alpha】——Sixth Scrum Meeting
一.今日站立式会议照片 二.每个人的工作 成员 昨天已完成的工作 今天计划完成的工作 李永豪 对统计出现的问题进一步完善 学习将项目做成APK 郑靖涛 完善报表设计 协助设计账目一览表板块 杨海亮 测 ...
- 201521123042 《java程序设计》 第八周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. ①泛型定义:泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展, ...
- 201521123055 《Java程序设计》第11周学习总结
1. 本章学习总结 2. 书面作业 Q1.互斥访问与同步访问 ** 完成题集4-4(互斥访问)与4-5(同步访问) ** 1.1 除了使用synchronized修饰方法实现互斥同步访问,还有什么办法 ...
- 2017JAVA课程设计
1.团队课程设计博客链接 http://www.cnblogs.com/ltykm/p/7063663.html 2.个人负责模块或任务说明 本人任务:定时器具体功能的实现 3.自己的代码提交记录截图 ...
- Python的自学之路:Python基础(一)
声明:我写博客不是为了什么,只是为了记录自己的学习状态,学过的知识点!方便以后进行好的复习!python小白,勿喷 python环境的搭建,在这里就不细说了,这里有我的链接,可以参考一下:https: ...