《effective java》已经阅读并运用的项目中,AJAX还是浅尝辄止的状态,不过本身AJAX对我而言就是小甜品,适当的用下的。下个目标就是《junit in action》学习TDD开发模式,因为这个实在让我感觉到JAVA做BI真是太麻烦太不爽了。
概述
JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework),供Java开发人员编写单元测试之用。
Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。
由于Junit相对独立于所编写的代码,可以测试代码的编写可以先于实现代码的编写,XP 中推崇的 test first design的实现有了现成的手段:用Junit写测试代码,写实现代码,运行测试,测试失败,修改实现代码,再运行测试,直到测试成功。以后对代码的修改和优化,运行测试成功,则修改成功。
Java 下的 team 开发,采用 cvs(版本控制) + ant(项目管理) + junit(集成测试) 的模式时,通过对ant的配置,可以很简单地实现测试自动化。
Junit本身是围绕着两个设计模式来设计的:命令模式和集成模式.
命令模式
利用TestCase定义一个子类,在这个子类中生成一个被测试的对象,编写代码检测某个方法被调用后对象的状态与预期的状态是否一致,进而断言程序代码有没有bug。
集成模式
利用TestSuite可以将一个TestCase子类中所有test***()方法包含进来一起运行,还可将TestSuite子类也包含进来,从而行成了一种等级关系。可以把TestSuite视为一个容器,可以盛放TestCase中的test***()方法,它自己也可以嵌套。这种体系架构,非常类似于现实中程序一步步开发一步步集成的现况。
Junit的各种断言:
1,assertEquals([String message],
expected,
actual)
这是使用得最多的断言形式。
expected-是你的期望值(通常要硬编码)
actual-被测代码实际产生的值
message-可选的消息,如果提供的话,将会在发生错误的时候报告这个消息。
2,assertNull([String message],java.lang.Object object)
assertNotNull([String message],java.lang.Object object)
验证一个给定的对象是否为Null(或者为非Null),如果答案为否,则将会失败。message参数是可选的。
3,assertSame( [String message],
expected,
actual)
验证expected参数和actual
参数所引用的是否为同
一对象,如果不是的
话,将会失败。Message
参数是可选的。
4,assertTrue( [String message],boolean condition)
验证给定的二元条件是否为真,如果为假的话,将会失败。Message参数是可选的。
assertFalse( [String message],boolean condition)
验证给定的二元条件是否为假,如果不为假的话,将会失败。Message参数是可选的
5,fail( String message )
使测试立即失败,其中message参数使可选的。
这种断言通常被用于标记某个不应该到达的分支(例如,在一个预期发生的异常之后)
一些使用JUnit经验 :
不要用TestCase的构造函数初始化,而要用setUp()和tearDown()方法。
不要依赖或假定测试运行的顺序,因为JUnit利用Vector保存测试方法。所以不同的平台会按不同的顺序从Vector中取出测试方法。
避免编写有副作用的TestCase。例如:如果随后的测试依赖于某些特定的交易数据,就不要提交交易数据。简单的回滚就可以了。
当继承一个测试类时,记得调用父类的setUp()和tearDown()方法。
将测试代码和工作代码放在一起,一边同步编译和更新。 ??
测试类和测试方法应该有一致的命名方案。如在工作类名前加上test从而形成测试类名。
确保测试与时间无关,不要依赖使用过期的数据进行测试。导致在随后的维护过程中很难重现测试。
尽可能地利用JUnit提供地assert/fail方法以及异常处理的方法,可以使代码更为简洁。
测试要尽可能地小,执行速度快
Junit的扩展:
JUnit + HttpUnit=WEB功能测试工具
JUnit + hansel =代码覆盖测试工具
JUnit + abbot =界面自动回放测试工具
JUnit + dbunit =数据库测试工具
JUnit + junitperf=性能测试工具