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结合着就好了。 

时间: 2024-08-30 00:00:09

JavaEE下的测试驱动 乱弹的相关文章

Ruby on rails开发从头来(windows)(二十七)- 测试驱动开发

在敏捷开发的实践中,测试驱动是少不了的.这篇来看看在rails中的一个测试驱动开发的例子. 在前面我们编写并进行了一些单元测试和功能测试,现在,我们的客户突然要求添加一个功能:系统的每个用户都可以对商品进行查询. 我们先初步的画了一些草图,来整理我们的思路和设计,然后开始写代码.对于具体的实现,我们已经有了大致的思路,但是如果有更多的反馈信息的话会有助于我们走在正确的道路上.我们会在深入到代码之前,编写测试代码.考虑我们的代码将怎样工作,确定一些规约,当测试通过,你的代码就OK了. 现在,我们来

《测试驱动数据库开发》目录—导读

版权声明 测试驱动数据库开发 Authorized translation from the English language edition, entitled Test-Driven Database Development: Unlocking Agility, 9780321784124 by Max Guernsey, III, published by Pearson Education, Inc., publishing as Addison-Wesley, Copyright 2

Linux下DM9000网卡驱动实验

Linux下DM9000网卡驱动实验 1.1        硬件系统介绍 1.1.1          网络驱动程序的特点     网络驱动程序是介于硬件和内核之间传送数据包,不是面向流的设备,不能象/dev/tty1那样简单的映射到文件系统的节点上.Linux调用这些接口的方式是给他们分配一个独立的名字(如eth0).这样的名字在文件系统中并没有对应项.内核和网络设备驱动程序之间的通信与字符设备驱动程序和快设备驱动程序与内核间的通信是完全不同的.内核不再调用read/write,它调用与数据包

《测试驱动数据库开发》—第2章2.1节TDD中类的角色

第 2 章 建立数据库的类 测试驱动数据库开发 开始测试驱动数据库时,需要做的第一件事是定义数据库的类,并且不用过多地担心特定的数据库实例.读完本书后,读者将有可能开始从允许任意的手工修改,转变到允许保持任意有意义的数据库实例.为了帮读者达到这个目的,本章将深入讨论什么是类以及类如何能够提供帮助,还将深入探讨在数据库开发中的影响力是如何不同于应用程序开发的影响力的. 在调和了类的本质与在数据库开发中出现的新的影响力之后,本章展现了一个数据库的类的需求,并展示了如何实现该需求.希望能为开发者提供与

《测试驱动数据库开发》——2.1 TDD中类的角色

2.1 TDD中类的角色 测试驱动数据库开发 在测试驱动开发中,一个类的主要作用是提供一种机制,以便许多具有相同行为的对象能够被创建.这一点非常重要,因为测试软件的方式就是通过检查一个单独对象的行为,并据此来预知从该对象的类生成的所有其他实例的行为. 当没有类时,测试仅仅告诉开发者有关某个特定对象的情况.当有了类时,测试会告诉开发者有关对象将如何被创建的情况,并进一步告诉开发者所有其他对象将如何被创建的情况. 2.1.1 可靠的实例化过程 当人们说"我写了一个对象来做X事情"时,事实上

《测试驱动数据库开发》——2.2 面向对象编程语言中的类

2.2 面向对象编程语言中的类 测试驱动数据库开发 为何对象的类来到应用开发世界的时间要远远比数据库的类早呢?首先,与在应用开发世界相比,在数据库世界中能让类成为必要元素的影响力没有那么强大,这一点先暂且不谈.其次,相比创建数据库实例,我们能够更加容易地建立可靠的方法来在应用会话中创建对象. 2.2.1 类的构建很容易:构建新对象即可 在面向对象编程的世界中,类其实仅有两个职责:创建新对象和析构(destroy)被废弃的对象.就本书的目的而言,析构其实并不重要.然而,对象的创建绝对是重要的. 在

《测试驱动数据库开发》—第2章2.2节面向对象编程语言中的类

2.2 面向对象编程语言中的类 测试驱动数据库开发 为何对象的类来到应用开发世界的时间要远远比数据库的类早呢?首先,与在应用开发世界相比,在数据库世界中能让类成为必要元素的影响力没有那么强大,这一点先暂且不谈.其次,相比创建数据库实例,我们能够更加容易地建立可靠的方法来在应用会话中创建对象. 2.2.1 类的构建很容易:构建新对象即可 在面向对象编程的世界中,类其实仅有两个职责:创建新对象和析构(destroy)被废弃的对象.就本书的目的而言,析构其实并不重要.然而,对象的创建绝对是重要的. 在

测试驱动开发TDD(3)

上一篇我剩下的To-Do-List: 猜测数字 输入验证 生成答案 输入次数 输出猜测结果 今天争取全部搞定. 现在我们Guesser.生成答案.输入验证都有了.把它们组装成一起摇身一变成一个Game! 用一个类把这些职责单一的小模块组合起来.我暂且称它为GameManager. 分析剩下的需求.(1)输入6次GameOver.(2)输入合法数字返回猜测结果.(3)游戏结束提示重新开始游戏.(4)中途输入exit 退出游戏.(5)输入正确答案,GameOver. 先把之前写的Guesser提出一

Nodejs学习笔记之测试驱动_node.js

分享第二章,关于测试驱动.这里的测试主要针对Web后端的测试 -- 你为什么要写测试用例(即测试用例的完善是否是浪费时间),如何完善你的测试用例,代码设计如何简化测试用例的书写,以及一些后期的构想. 1. 你为什么要写测试用例 这个习惯通常会被认为是一种耽误开发进度的行为,你需要花费几乎和开发代码相同的时间来逐步完善你的测试用例.但是在开发过程中,在开发完成一段代码后如果负责任而不是说完全把问题交给测试人员去发现的话,这个时候通常都会去做一些手动的测试.例如: 在代码中执行某些方法,查看输出的值