公司介绍 产品展示 业务支持 解决方案 文档资料
网站导航 访客留言 技术论坛
     
     
  产品资料
  业界动态
  JAVA技术


首  页 > 文档资料 > 产品资料  
 
  TDD在IDEA下的实施

TDD(测试驱动开发)是一项保证程序质量的开发方法论,其带来的好处相信每个人都认可。但是在实际的开发中却很少有人去遵守,主要有以下几个原因:

  1. 编写TestCase代码要浪费时间,毕竟TestCase也是代码,需要你去编写的;
  2. 运行测试要快捷,有时运行一个测试需要我们进行几步操作,这样无疑变相浪费时间;
  3. 有时TestCase无法编写,如不合理的设计、和容器或第三方相关等,造成编写TestCase的难道增加,只能寻求调试。
  4. 缺乏导航,如我们在编写实现代码时,突然想转入测试代码中进行测试,如果没有良好的导航机制,方便我们在被测代码和测试代码之间导航,那么查找会浪费你不少时间。
  5. 相关的约束。如果我们的TestCase类不规范的话,那么也会给我埋下隐患。如测试方法中没有assertion语句,那么在自动化测试中将毫无意义,断言中不包含自定义信息,出错时将很难理解等。

通过以上几个方面的考虑,要利用TDD带来的优点,我们必须要付出点代价,如何将这些代价降到最低,这是我们必须关注的。下面让我们进入IDEA下TDD开发的世界,如何简化这些具体操作的细节。

1 首先我们要安装一个UnitTest的插件,你可以通过IDEA的plugin Manager安装,安装完毕后重启IDEA,打开“File Templates”配置选项,将“Default Test Class”和“Default Test Method”的内容进行更改,修改成你希望生成的代码,这里提供了两个缺省配置,请将这两个文件的内容覆盖文件模板对应的文件内:Default Test Class.javaDefault Test Method.java

2 设置UnitTest选项,主要是设置源码和测试代码的映射关系。你可以下载我们的TDD项目,方便你的参考。下载TDD项目

3 设置项目的目录结构,这里主要设置源码目、源码编译目录、测试代码目录和测试代码编译目录,同时将JUnit的开发包加入到项目模块的classpath中。

4 下面将进行开发吧。首先我们建立一个类,如Demo,包含一个最简单的方法:加法操作。代码如下:

5 在sum方法中,按下Ctrl+Alt+T,这时你会发现一个TestCase就自动给你生成好啦,同时也包含了光标所在处函数的测试方法,你只需修改一下测试方法中的相关变量值,加入assertion语句就可以啦。注意:你需要在setUp函数中去实例化你要测试的类。

6 在testSum函数中,按下Ctrl+Shift+F10,就可以测试该方法啦,你熟悉的Green Bar就会呈现啦。

7 如果你想在测试方面和被测方法直接做导航,只需按下Ctrl+Shift+T就可以啦,这种切换对测试来说非常便捷。如果你编写一个新的方法,同样按下Ctrl+Shift+T就可以生成对应测试方法。

8 IDEA提供了Inspection机制,就是审查你的代码,这种机制是实时的,在你键入代码时就已经在运行。我们打开IDEA设置面板的“Errors”配置选项,将默认的方案复制一份,然后才能进行修改,找到JUnit项,进行如下设置:

A UnitCase类不需要无参数的构造函数,所有初始化可以在setUp函数中处理

B 测试方法中没有调用assertion语句,没有assertion语句这对测试来说时非常不利的

C setUp方法中没有调用supert.setUp()语句。调用super.setUp()语句是非常必要的,如果我们继承JUnit的TestCase的没有问题,如果我们继承了自定义的TestCase类或第三方的TestCase类,缺少supert.setUp()方法会让测试无法进行,建议都要调用这个语句。tearDown也是同样的机理。

D 简化assertTrue()操作

E assertion语句必须提供测试失败消息,这样测试失败时我们就可以知道具体的信息。

…………

这些选项设置要在IDEA 5.0环境下。

9 回到测试类编辑窗口,这时你会发现我们刚才的testSum方法名被高亮显示出来,提示我们要加入assertion语句。

总结:通过以上这个例子让我们回头来看看一开始提出的问题:

  1. 我们通过文件模板实现自动创建TestCase类、测试方法,而且非常便捷,只需Ctrl+Shift+T,同时文件模板可以修改,你可以定义你生成的测试类和方面的代码。
  2. 运行快捷,我们要测试一个方法时,将光标置于方法中只需按下Ctrl+Shift+F10,测试整个类只需将光标放在非测试方法中,点击“Project”工具窗口,我们一次可以测试我们选择的测试类或整个测试包,运行测试非常简单。
  3. 有时测试代码非常难做,这是你需要考虑一下你的设计,同时可以找一些JUnit的扩展包,如测试Struts Action,Spring的Bean,采取Mock Object等等,编写相应的测试文件模板,生成这样的测试也不是很困难。
  4. 现在在测试代码和被测试代码间,只需按下Ctrl+Shift+T就可以自由切换。有过这样的经历吗?修改了你同事代码中的坏问道(Code Smell),却不知道他的测试类在哪里,最后只好告诉他自己修改。现在没有这个担心,只需Ctrl+Shift+T就可以定位到测试方法,优化代码在也不用担心啦。
  5. IDEA的Inspection机制提供了不少约束,这主要时提高你的代码质量。在JUnit的方面,几个非常有用的实时提醒,让你的测试非常专业和合理。

IDEA下的这些机制可以保证你在TDD开发非常高效,不在讨厌烦人的测试,通过这些便捷机制,让每一个开发人员都喜欢上测试,现在就尝试一下吧。

注意实现:在打开文章所带的项目之前,请确保UnitTest插件已经装上,同时要设置好文件模板。最新的IDEA 5.0你可以通过 http://www.intellij.net/eap下载。