动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
电脑书籍下载:程序设计书籍 | 数据库教程书籍 | 平面与多媒体书籍 | 网络通讯书籍 | 系统管理书籍 | 网络安全书籍 | 认证考试书籍
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息



本月文章推荐
.用NetBeans开发平台开发J2ME游戏.
.Java的类装载器和命名空间.
.JAVA中的指针,引用及对象的clone.
.用Java实现语音引擎.
.JDK1.3 中的本地绘制支持.
.iBATIS step by step (1).
.Eclipse开发struts完全指南一(全.
.评论:Java应用热遍全球.
.利用Eclipse开发Hibernate应用程.
.读 MP3 文件的头信息(ID3V1).
.JAVA:MD5加密器.
.实现游戏中的文字滚屏功能.
.在ModalDialog中操作父窗口对象.
.JavaServer Faces 简介.
.Java的事件处理.
.[JAVA100例]028、图片的处理.
.决定实施方案.
.Java 技术与.NET 的集成将打破SO.
.Java新手入门:整理SCJP听课笔记.
.为J2ME开发移动3D游戏之立即模式.

Java标准单元测试库JUnit4抢先看

发表日期:2008-1-5 |



  JUnit 是 Java? 语言事实上的 标准单元测试库。JUnit 4 是该库三年以来最具里程碑意义的一次发布。它的新特性主要是通过采用 Java 5 中的标记(annotation)而不是利用子类、反射或命名机制来识别测试,从而简化测试。在本文中,执着的代码测试人员 Elliotte Harold 以 JUnit 4 为例,具体介绍了如何在自己的工作中使用这个新框架。注重,本文假设读者具有 JUnit 的使用经验。
  
  JUnit 由 Kent Beck 和 Erich Gamma 开发,几乎毫无疑问是迄今所开发的最重要的第三方 Java 库。正如 Martin Fowler 所说,“在软件开发领域,从来就没有如此少的代码起到了如此重要的作用”。JUnit 引导并促进了测试的盛行。由于 JUnit,Java 代码变得更健壮,更可靠,bug 也比以前更少。JUnit(它本身的灵感来自 Smalltalk 的 SUnit)衍生了许多 xUnit 工具,将单元测试的优势应用于各种语言。nUnit (.NET)、pyUnit (Python)、CppUnit (C++)、dUnit (Delphi) 以及其他工具,影响了各种平台和语言上的程序员的测试工作。
  
  然而,JUnit 仅仅是一个工具而已。真正的优势来自于 JUnit 所采用的思想和技术,而不是框架本身。单元测试、测试先行的编程和测试驱动的开发并非都要在 JUnit 中实现,任何比较 GUI 的编程都必须用 Swing 来完成。JUnit 本身的最后一次更新差不多是三年以前了。尽管它被证实比大多数框架更健壮、更持久,但是也发现了 bug;而更重要的是,Java 不断在发展。Java 语言现在支持泛型、枚举、可变长度参数列表和注释,这些特性为可重用的框架设计带来了新的可能。
  
  JUnit 的停滞不前并没有被那些想要废弃它的程序员所打败。挑战者包括 Bill Venners 的 Artima SuiteRunner 以及 Cedric Beust 的 TestNG 等。这些库有一些可圈可点的特性,但是都没有达到 JUnit 的知名度和市场占有份额。它们都没有在诸如 Ant、Maven 或 Eclipse 之类的产品中具有广泛的开箱即用支持。所以 Beck 和 Gamma 着手开发了一个新版本的 JUnit,它利用 Java 5 的新特性(尤其是注释)的优势,使得单元测试比起用最初的 JUnit 来说更加简单。用 Beck 的话来说,“JUnit 4 的主题是通过进一步简化 JUnit,鼓励更多的开发人员编写更多的测试。”JUnit 4 尽管保持了与现有 JUnit 3.8 测试套件的向后兼容,但是它仍然承诺是自 JUnit 1.0 以来 Java 单元测试方面最重大的改进。
  
  注重:该框架的改进是相当前沿的。尽管 JUnit 4 的大轮廓很清楚,但是其细节仍然可以改变。这意味着本文是对 JUnit 4 抢先看,而不是它的最终效果。
  
  测试方法
  
  以前所有版本的 JUnit 都使用命名约定和反射来定位测试。例如,下面的代码测试 1+1 等于 2:
  
  import junit.framework.TestCase;
  
  public class AdditionTest extends TestCase {
  
  private int x = 1;
  private int y = 1;
  
  public void testAddition() {
  int z = x + y;
  assertEquals(2, z);
  }
  
  }
  
  而在 JUnit 4 中,测试是由 @Test 注释来识别的,如下所示:
  
  import org.junit.Test;
  import junit.framework.TestCase;
  
  public class AdditionTest extends TestCase {
  
  private int x = 1;
  private int y = 1;
  
  @Test public void testAddition() {
  int z = x + y;
  assertEquals(2, z);
  }
  
  }
  
  使用注释的优点是不再需要将所有的方法命名为 testFoo()、testBar(),等等。例如,下面的方法也可以工作:
  
  import org.junit.Test;
  import junit.framework.TestCase;
  
  public class AdditionTest extends TestCase {
  
  private int x = 1;
  private int y = 1;
  
  @Test public void additionTest() {
  int z = x + y;
  assertEquals(2, z);
  }
  
  }
  
  下面这个方法也同样能够工作:
  
  import org.junit.Test;
  import junit.framework.TestCase;
  
  public class AdditionTest extends TestCase {
  
  private int x = 1;
  private int y = 1;
  
  @Test public void addition() {
  int z = x + y;
  assertEquals(2, z);
  }
  
  }
  
  这答应您遵循最适合您的应用程序的命名约定。例如,我介绍的一些例子采用的约定是,测试类对其测试方法使用与被测试的类相同的名称。例如,List.contains() 由 ListTest.contains() 测试,List.add() 由 ListTest.addAll() 测试,等等。
  
  TestCase 类仍然可以工作,但是您不再需要扩展它了。只要您用 @Test 来注释测试方法,就可以将测试方法放到任何类中。但是您需要导入 junit.Assert 类以访问各种 assert 方法,如下所示:
  
  import org.junit.Assert;
  
  public class AdditionTest {
  
  private int x = 1;
  private int y = 1;
  
  @Test public void addition() {
  int z = x + y;
  Assert.assertEquals(2, z);
  }
  
  }
  
  您也可以使用 JDK 5 中新特性(static import),使得与以前版本一样简单:
  
  import static org.junit.Assert.assertEquals;
  
  public class AdditionTest {
  
  private int x = 1;
  private int y = 1;
  
  @Test public void addition() {
  int z = x + y;
  assertEquals(2, z);
  }
  
  }
  
  这种方法使得测试受保护的方法非常轻易,因为测试案例类现在可以扩展包含受保护方法的类了。
  
  SetUp 和 TearDown
  
  JUnit 3 测试运行程序(test runner)会在运行每个测试之前自动调用 setUp() 方法。该方法一般会初始化字段,打开日志记录,重置环境变量,等等。例如,下面是摘自 XOM 的 XSLTransformTest 中的 setUp() 方法:
  
  protected void setUp() {
  
  System.setErr(new PrintStream(new ByteArrayOutputStream()));
  
  inputDir = new File("data");
  inputDir = new File(inputDir, "xslt");
  inputDir = new File(inputDir, "input");
  
  }
  
  在 JUnit 4 中,您仍然可以在每个测试方法运行之前初始化字段和配置环境。然而,完成这些操作的方法不再需要叫做 setUp(),只要用 @Before 注释来指示即可,如下所示:
  
  @Before protected void initialize() {
  
  System.setErr(new PrintStream(new ByteArrayOutputStream()));
  
  inputDir = new File("data");
  inputDir = new File(inputDir, "xslt");
  inputDir = new File(inputDir, "input");
  
  }
  
  甚至可以用 @Before 来注释多个方法,这些方法都在每个测试之前运行:
  
  @Before protected void findTestDataDirectory() {
  inputDir = new File("data");
  inputDir = new File(inputDir, "xslt");
  inputDir = new File(inputDir, "input");
  }
  
  @Before protected void redirectStderr() {
  System.setErr(new PrintStream(new ByteArrayOutputStream()));
  }
  
  清除方法与此类似。在 JUnit 3 中,您使用 tearDown() 方法,该方法类似于我在 XOM 中为消耗大量内存的测试所使用的方法:
  
  protected void tearDown() {
  doc = null;
  System.gc();
  }
  
  对于 JUnit 4,我可以给它取一个更自然的名称,并用 @After 注释它:
  
  @After protected void disposeDocument() {
  doc = null;
  System.gc();
  }
  
  与 @Before 一样,也可以用 @After 来注释多个清除方法,这些方法都在每个测试之后运行。
  
  最后,您不再需要在超类中显式调用初始化和清除方法,只要它们不被覆盖即可,测试运行程序将根据需要自动为您调用这些方法。超类中的 @Before 方法在子类中的 @Before 方法之前被调用(这反映了构造函数调用的顺序)。@After 方法以反方向运行:子类中的方法在超类中的方法之前被调用。否则,多个 @Before 或 @After 方法的相对顺序就得不到保证。
  
  套件范围的初始化
  
  JUnit 4 也引入了一个 JUnit 3 中没有的新特性:类范围的 setUp() 和 tearDown() 方法。任何用 @BeforeClass 注释的方法都将在该类中的测试方法运行之前刚好运行一次,而任何用 @AfterClass 注释的方法都将在该类中的所有测试都运行之后刚好运行一次。
  
  例如,假设类中的每个测试都使用一个数据库连接、一个网络连接、一个非常大的数据结构,或者还有一些对于初始化和事情安排来说比较昂贵的其他资源。不要在每个测试之前都重新创建它,您可以创建它一次,并还原它一次。该方法将使得有些测试案例运行起来快得多。例如,当我测试调用第三方库的代码中的错误处理时,我通常喜欢在测试开始之前重定向 System.err,以便输出不被预期的错误消息打乱。然后我在测试结束后还原它,如下所示:
  
  // This class tests a lot of error conditions, which
  // Xalan annoyingly logs to System.err. This hides System.err
  // before each test and rest
上一篇:我的Thinking in Java学习笔记(十) 人气:292
下一篇:全面挖掘JavaExcelAPI使用方法 人气:433
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-7-19 Roclog v3.1.4 SP1
2008-7-19 马克斯CMS(Maxcms) v1.1 Build 0
2008-7-19 乐学LBBS无限级目录图片直读系统
2008-7-19 PHP在线考试系统PPExam v1.2.5
2008-7-19 APJE私服发布系统 v2.0
2008-7-19 寻觅图书管理系统 v1.12
2008-7-19 寻觅学校管理系统
2008-7-19 义乌网站目录baidu新闻订阅 v1.0
2008-7-19 牛仔IIS日志蜘蛛爬行记录分析器
2008-7-19 UltraEdit 简体中文增强版 14.10
2008-7-19 CentOS 5.2 i386 LiveCD
2008-7-19 Snapture多功能相机 v1.4
2008-7-19 iAcces中文输入法 v1.0Build016
2008-7-19 Cookbook烹饪秘籍 v2.5
2008-7-19 苹果专用DVD转换工具 v1.1.59汉化
2008-7-19 Modem修复软件ZiPhone修改版04.0
2008-7-19 AgileMessenger即时通讯工具美化
2008-7-19 Sketches画图软件 v0.7b6破解版


  发表评论
姓 名: 验证码:
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵