从第一次知道Fitnesse这个集成测试工具到现在也已经差不多有2年多的时间了。在这个期间把Fitnesse的源码也算是反反复复阅读了很多遍,算是对其实现的原理和方法有所了解。在最近一次对Fitnesse最新版本代码的研究中我发现,Fitnesse除了是一个很好的开源集成测试框架之外,它的源代码还是一个非常好的实施Java单元测试的例好例子。

首先我们可以看到在Fitnesse的每个类,都有一个对应的Test的类来构建针对这个功能类的单元测试。

一个好的单元测试的命名是非常重要的,它可以让我们很清楚的指导我们的单元测试类是针对哪个功能类编写的。Fitnesse的开发团队采用的命名规范是在功能类的名字后面增加Test的后缀,这样可以在一个包里面很好的区分功能类和测试类。

单元测试类和源码之间的放置关系也是我们经常遇到的问题。在这里Fitnesse的开发团队把所有的单元测试类(*.Test)和源码是放在同一个项目里面,并且也放在同一个包内,这样在功能上非常容易区分和归类。我们可以很容易的找到单元类的测试类在哪里。其次这样的单元测试类在编写上更加方便,不太收到java的access控制的影响。例如protected的变量在包内是可见的,这样的话同一包内的单元测试类就可以对很轻松的针对它进行单元测试。第三在Fitnesse的发布的build.xml中,也很好的继承了单元测试,这样在发布的过程中对于质量有了很好的控制,做到了单元测试自动化。参考下面的build.xml文件

我们到底应该对哪些方法做单元测试呢?这个问题也一直是我们在做单元测试的时候一直困扰的问题。我们之前习惯上算是针对没一个方法构建单元测试,这样的单元测试在覆盖率上很高,但是工作的时间成本就会直线上身。测试工作需要在时间和质量上寻找一个平衡。从Fitnesse的源代码中可以看到,Fitnesse的开发团队并没有采用上面的那种单元测试的方法。他们采用的是针对主要的功能方法进行单元测试。我们来看下面这个例子

……………………

这样就完成了针对所有可能的Http Response Code的测试的覆盖。这里只是一个简单的Fitnesse中的例子,在很多其他的单元测试类中我们都能看到。

针对主要功能函数的构建单元测试对于独立进行单元测试的测试团队来说是一个很大的考验。正式因为Fitnesse源码的单元测试是其开发团队自己编写的,他们可以很清楚的指导哪个函数是关键函数,哪个是不重要的。但是如果是独立的测试团队,他们就很难去判断被测试函数的重要性来决定是否需要构建单元测试。

单元测试中最最重要的一个概念就是驱动模块和桩模块。从百度百科上我查到的定义如下:

驱动模块是用来模拟被测试模块的上一级模块,相当于被测模块的主程序。它接收数据,将相关数据传送给被测模块,启用被测模块,并打印出相应的结果。

21/212>

fitnesse java_从Fitnesse中学习Java单元测试相关推荐

  1. 在javascript中使用java_在JavaScript中使用Java

    12.3 在JavaScript中使用Java 利用JavaScript可以把Java语言的小应用程序(applet),插件以及包括表单.超 级链接和图象在内的各种Web元素有机地联系起来. Java ...

  2. sample java_从sample来学习Java堆(转)

    1)Java堆 所有对象的实例分配都在Java堆上分配内存,堆大小由-Xmx和-Xms来调节,sample如下所示: public class HeapOOM { static class OOMOb ...

  3. eclipse做java_在Eclipse中使用Java 12

    eclipse做java 1.安装JDK 12 链接: https : //www.oracle.com/technetwork/java/javase/downloads/jdk12-downloa ...

  4. octave安装 缺java_在Octave中导入Java类

    我一直很难弄清楚该怎么做.从八度的网站,似乎Java类是通过类路径中找到.此堆栈溢出答案指示"静态Java路径"是"动态Java路径".但是我不确定如何设置静态 ...

  5. 负数在java_在负数中使用Java纪元秒

    我正在编写一个涉及将java.util.Date转换为java.sql.Date的程序- 我已经使用getTime()方法完成了- java.util.Date dt = new java.util. ...

  6. java 枚举学习--从小程序中学习

    java 枚举学习--从小程序中学习 Java 枚举类型 解析 简介:java中枚举是一个类 用之前我觉得还是要知道应该何时使用: 一条普遍的规律是,任何使用常量的地方,例如目前使用的switch 代 ...

  7. java培训分享:学习Java需要什么软件

    在参加java培训过程中学习java技术,需要用到很多辅助工具,这些辅助工具是具有多功能性和实用性的,从代码构建到bug压缩.学习这些工具可以帮助您提高代码的质量,并成为一个更高效的Java开发人员. ...

  8. 如何高效的学习JAVA?

    如果你想成为一名优秀的JAVA程序员,那么高效学习JAVA是必不可少的.以下是一些可以帮助你更好地学习JAVA的方法和技巧,其中包括: 确定自己的学习目标和计划.这将帮助你集中精力,并确保你在学习过程 ...

  9. 使用JMockit编写java单元测试

    之前<有效使用Mock编写java单元测试>一文中层介绍过使用EasyMock和PowerMock来编写java单元测试,今天介绍一个更加强大的工具--JMockit. 引用单元测试中mo ...

最新文章

  1. c语言解一维波动方程,python绘制一维波动方程(初学者)
  2. 数据结构二分法算法的步骤_数据结构与算法之算法思想:二分法搜索实现(python)...
  3. 用指针来表示二维数组的方法
  4. VTK:Points之NormalEstimation
  5. python numpy和pandas数据处理_python中添加数据分析工具numpy和pandas
  6. [HBase_3] HBase 命令
  7. eclipse class 中无法打断点
  8. block compressed sparse row (BSR) matrix format
  9. Java代码增加回滚6_如何编写取消按钮的代码以撤消/回滚添加和更新正在进行的行4gl...
  10. 语义分析的方法简述之文本基本处理
  11. 福昕pdf阅读器,怎么将pdf文件中的某一页,提取出来,即分页保存?
  12. html style设置靠右,css怎么设置右对齐
  13. Guava: Joiner
  14. 百度文库上传总是被私有,如何正确上传百度文库
  15. VS2016相对路径起点
  16. Mac 升级 Bash 到最新版本
  17. Filling the Gaps: Multivariate Time Series Imputation by Graph Neural Networks
  18. 怎么视频转文字?分享3个视频转文字方法
  19. K8S、kubernetes no resolver defined to resolve could not be resolved (3: Host not found) 问题解决
  20. 做移动端电子签名发现canvas的 一些坑

热门文章

  1. 微信储存卡已拔出,如何解决
  2. Linux下对grub引导文件丢失进行恢复
  3. Windows系统 lusrmgr命令详解,Windows命令行查看本地用户和组
  4. Python - AES SHA1PRNG 加密解密总结
  5. 【无标题】C语言for循环输出字符数组
  6. 【Python核心】输入与输出
  7. 【“鲸智搭”入驻钉钉应用市场!三步走,教你轻松搭建流程表单】
  8. s-function搭建变参数PMSM模型
  9. 今日头条怎么赚钱?头条号的赚钱思路
  10. Speedoffice(PPT)如何更改配色方案