当前位置: 首页 > news >正文

JavaEE下的测试驱动 乱弹

本月的课题是在研发团队中推广Enterprise Java的单元测试,说是单元测试,其实很大程度上是单元测试和验收测试的一个综合产物。在2003年的大连,elian同学就高瞻远瞩的提出我们做的既不是白盒测试,也不是黑盒测试,而是灰盒测试。神人啊。在实践Fit,Selenium,dbunit以及很多xUnit扩展,各有优缺点。
看过若干本xUnit方面的书籍,也在项目中实践过,那时我还是个一门心思做研发的坏脾气小子,挺不配合测试人员的工作(但现在许多开发人员对测试人员的态度,我实在是不想提了,要是按照我当年的脾气,非重打100杀威棒并拖出去喂狗不可),后来我迷上了需求管理,再后来我发现真正的让需求不虚的研发方式是:测试驱动开发(Test Driven Development)。
有这种豁然开朗的心得,不是在C++的开发环境下,也不是“集尔意意(J2EE,某客户读音)”的开发团队中,而是在使用Rails时。Rails有千般好,我在这里不想细说。有一点是,当你用过了Ruby on Rails后,你基本上不想再碰java的哪怕一行代码,特别是在用rails做完了单元测试和功能性测试之后。Rails对单元测试和功能性测试的支持,那叫一个绝啊。
可是大部分的开发人员不像我这样,可以轻松切换到J2EE之外的平台,所以还是要做JavaEE下的单元测试推广,如果谁想跟我说,用junit啊,我相信他基本上就没有真正的写单元测试。由于过渡的采用了若干的模式、分层。。。要在J2EE开发团队中推单元测试还真不是件易事,更不用说是在那些个“累死了都不应该可怜的”觉着“单元测试是测试人员应该做的事”的开发人员的团队中推广了。
其实路子是已经成熟了的,主要的问题是谁也不愿意费力,潜台词是:我宁愿重启若干次服务器来调试,我宁愿reopen若干次bug,也不愿意接触“新”玩意.这玩意新吗?这玩意真得浪费了你宝贵的时间吗?做程序员做到这个份上,真是悲哀。
其实也难怪,看一下一段java代码:
import java.util.List;
import java.util.ArrayList;
class Erase {
private List filterLongerThan(List strings, int length) {
List result = new ArrayList();
for (int i = 0; i < strings.size(); i++) {
String s = (String) strings.get(i);
if (s.length() <= length) {
result.add(s);
}
}
return result;
}
public static void main(String[] args) {
List names = new ArrayList();
names.add("Ted"); names.add("Fred");
names.add("Jed"); names.add("Ned");
System.out.println(names);
Erase e = new Erase();
List shortNames = e.filterLongerThan(names, 3);
System.out.println(shortNames.size());
for (int i = 0; i < shortNames.size(); i++) {
String s = (String) shortNames.get(i);
System.out.println(s);
}
}
}
要达到同样的效果,用同样运行在java 虚拟机中的groovy脚本再写:
names = ["Ted", "Fred", "Jed", "Ned"]
println names
shortNames = names.findAll{ it.size() <= 3 }
println shortNames.size()
shortNames.each{ println it }
别跟我提性能哈,就像当年我用c++写程序时,java开发人员跟我说的那样:现在内存这么便宜,多买点不就行了。
扯远了,J2EE下的单元测试,如果能够跟groovy结合着就好了。

相关文章:

  • html替换标题工具,TEReplace插件快速替换Typecho标题/内容关键字
  • 忙碌并快乐的2008北京春季之旅
  • 山西师范大学数学与计算机学院宿舍,山西师范大学数学与计算机学院介绍
  • 地大计算机学校2020考研大纲,【2020-2021】院校计算机考研初试科目变动情况统计...
  • 北交计算机考研保护一志愿吗,09我的考研之旅(北交计算机)
  • 2010年秋 江苏计算机二级,2011年秋江苏省计算机二级考试参考答案公布(10月15号考试)...
  • Microsoft Announcing Windows Mobile 6.1 from LAS VEGAS April 1, 2008
  • 计算机系统精品课,计算机系统-攀枝花学院精品课程网.ppt
  • 离散点插值方法、等值线的绘制及平滑技巧
  • sql使用正则表达式替换字符中的一个字
  • html水平镜像和垂直镜像,css实现镜像翻转的方法有哪些
  • 小胖子5个月了
  • 计算机等级考试两天是,2017计算机等级考试考前最后两天如何调整备考心态
  • Widows Mobile Workshop开发培训邀请函-西安站
  • 计算机基础作业3考试客户端答案,2015年12月份考试作业计算机基础第3次作业满分答案...
  • 2017前端实习生面试总结
  • C学习-枚举(九)
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • JavaScript中的对象个人分享
  • js数组之filter
  • LeetCode29.两数相除 JavaScript
  • Mac转Windows的拯救指南
  • magento2项目上线注意事项
  • ng6--错误信息小结(持续更新)
  • Protobuf3语言指南
  • Python实现BT种子转化为磁力链接【实战】
  • sessionStorage和localStorage
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • 工作手记之html2canvas使用概述
  • 机器学习 vs. 深度学习
  • 计算机在识别图像时“看到”了什么?
  • 简单实现一个textarea自适应高度
  • 普通函数和构造函数的区别
  • 微服务框架lagom
  • raise 与 raise ... from 的区别
  • #单片机(TB6600驱动42步进电机)
  • (C++17) std算法之执行策略 execution
  • (动态规划)5. 最长回文子串 java解决
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (九十四)函数和二维数组
  • (三)mysql_MYSQL(三)
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转) Android中ViewStub组件使用
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转)nsfocus-绿盟科技笔试题目
  • *1 计算机基础和操作系统基础及几大协议
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .NET Micro Framework初体验
  • .net 无限分类
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • [ C++ ] STL_list 使用及其模拟实现
  • [ vulhub漏洞复现篇 ] Django SQL注入漏洞复现 CVE-2021-35042
  • [AutoSar]BSW_Com07 CAN报文接收流程的函数调用
  • [BeginCTF]真龙之力
  • [C#] 我的log4net使用手册