Manning.JUnit.in.Action 第二版已经出来,大概过了一下,摘录了一些要点。
书中刚开始由浅入深的那个 Calculator 例子,委实不错。让我感觉, JUnit其实就是一堆断言的API,以前都是自己跟踪代码,打日志,思考,比对结果,JUnit不过是帮我们把思考的过程代码化而已。
单元测试框架应该遵循的三条原则:
1、每个单元测试应该独立运行,不依赖所有其他单元测试。
2、能够检测和报告测试错误。
3、应该很容易确定哪些单元测试将运行。
JUnit4 相对3重大改变,测试类不用再继承 TestCase。
书中有提及好几种设计模式,比如,facade,Inversion of Control,顺便重温了一下设计模式。
Purpose
Supplies a single interface to a set of interfaces within a system.
为子系统中的一组接口提供一个一致的界面,Facade 模式定义了一个高层接口,这个接口使得这一子系统更加容易使用,说白了也就是提供一个专用的单一窗口,简化操作。
比如你要去政府办个什么手续,需要七八个章,而且有先有后,太复杂啦。有个新官上任后,烧了一把火,决定开一个专用便民窗口,让复杂的问题看起来简单化。
不过正如Facade 字面里的另一个含义,“假象”,呵呵,可能神马都是浮云啊!
正好最近在做一个项目的Refacing,对设计模式颇感兴趣。之前的CRM系统虽有一层Facade,但纯粹是个嘘头,没什么实际意义,还要多走一层,甚是麻烦。
思来想去,也没什么好点子,代码改动量都很大。还好不用重构整个项目。
IoC 之前学Spring的时候,经常在眼前晃动的一个词,倒还没真的仔细研究过它的原理,这一段值得细究。
利用 Hamcrest 来简化断言语句。http://code.google.com/p/hamcrest/
比如原来标准的写法:
@Test
public void testWithoutHamcrest() {
assertTrue(values.contains("one")|| values.contains("two")|| values.contains("three"));
}
}
利用 Hamcrest 可以简化成
@Test
public void testWithHamcrest() {
assertThat(values, hasItem(anyOf(equalTo("one"), equalTo("two"),equalTo("three"))));
}
测试分类:
对于书中提高到的压力测试工具 JMeter ,甚感兴趣。也再一次有井底之蛙之感,以前只知有 QTC、Loadrunner。
Apache JMeter 是100%的Java桌面应用程序。用于对软件做压力测试,它最初被设计用于Web应用测试但后来扩展到其他测试领域。 它可以用于测试静态和动态资源例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库, FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来在不同压力类别下测试它们的强度和分析整体性能。
而另一款软件Fit 则更让我吃惊,http://fit.c2.com/ 听介绍倒是挺炫的,效果怎么样试过才知道。
Fit: Framework for Integrated Test
伟大的软件需要协作和交流。 Fit是一款旨在提高软件协同开发的工具。这是一种非常宝贵的协作方式来应对复杂的问题,让它们尽早走在正确的轨道上。
Fit让客户,测试人员和编程人员学习他们的软件应该怎么做,然后是它确实做了什么。它会自动比较客户的期望与实际结果。
A Fit document showing success (green) and failure (red)