本书主要介绍了在Java软件开发中使用JUnit进行测试的原则、技巧与实践,深入阐述如何编写自动测试,把一段代码隔离开来测试有什么好处,如何判断何时需要进行整合测试,并对如何测试完整的J2EE应用进行了极具价值的讨论。本书富含开发实践当中的真实案例,以专家手笔讨论了实践中的测试技术,主要内容包括:用mock objects进行隔离测试;用Cactus进行容器内测试;用Ant和Maven进行自动构建;在Eclipse内进行测试;对Java应用程序、Filter、Servlet、EJB、JSP、数据库应用程序、Taglib等进行单元测试。本书适合于在Java平台下进行各类软件开发的开发人员、测试人员、单元测试研习者以及编程爱好者阅读和学习,具有极高的参考价值。\r\n \r\n
译序 \r\n前言 \r\n致谢 \r\n关于本书 \r\n关于作者 \r\n关于书名 \r\n关于封面 \r\n第1部分 JUnit精粹 \r\n 1 JUnit起步\r\n 1.1 证实它能运作\r\n 1.2 从头开始 \r\n 1.3 理解单元测试框架 \r\n 1.4 安装JUnit \r\n 1.5 用JUnit测试 \r\n 1.6 小结 \r\n 2 探索JUnit \r\n 2.1 探索JUnit核心 \r\n 2.2 用test runner来运行测试 \r\n 2.2.1 选择test runner \r\n 2.2.2 定义你自己的test runner \r\n 2.3 用TestSuite来组合测试\r\n 2.3.1 运行自动suite \r\n 2.3.2 编写你自己的test suite \r\n 2.4 用TestResult来收集参数 \r\n 2.5 用TestListener来观察结果 \r\n 2.6 用TestCase来工作 \r\n 2.6.1 用fixture来管理资源 \r\n 2.6.2 创建单元测试方法 \r\n 2.7 创建TestCalculator全过程 \r\n 2.7.1 创建TestSuite \r\n 2.7.2 创建TestResult \r\n 2.7.3 执行测试方法\r\n 2.7.4 复习完整JUnit生命周期 \r\n 2.8 小结 38\r\n 3 JUnit实例 \r\n 3.1 引入controller组件 \r\n 3.1.1 设计接口 \r\n 3.1.2 实现基类 \r\n 3.2 让我们来测试吧 \r\n 3.2.1 测试DefaultController \r\n 3.2.2 增加处理器 \r\n 3.2.3 处理请求 \r\n 3.2.4 改进testProcessRequest \r\n 3.3 测试异常处理 \r\n 3.3.1 模拟异常条件 \r\n 3.3.2 测试异常 \r\n 3.4 建立测试项目 \r\n 3.5 小结 \r\n 4 探索软件测试 \r\n 4.1 单元测试的必要性 \r\n 4.1.1 带来更大的测试范围 \r\n 4.1.2 带来团队协作的可能 \r\n 4.1.3 防止衰退,减少调试 \r\n 4.1.4 使得重构可行 \r\n 4.1.5 改进实现设计 \r\n 4.1.6 当作开发者文档来用 \r\n 4.1.7 非常有趣 \r\n 4.2 不同种类的测试 \r\n 4.2.1 软件测试的4种类型 \r\n 4.2.2 单元测试的3种类型\r\n ……\r\n 5 JUnit自动化\r\n第2部分 测试策略 \r\n 6 用stub进行粗粒度测试\r\n 7 用mock objects 进行孤立测试\r\n 8 使用Cactus进行容器内测试\r\n第3部分 测试组件 \r\n 9 对servlet和filter 进行单元测试\r\n 10 对JSP和taglib 进行单元测试\r\n 11 对数据库应用程序进行单元测试\r\n 12 对EJB进行单元测试\r\nA 源代码说明\r\nB Eclipse快速上手\r\n参考文献 \r\n索引 \r\n
Vincent Massol是Jakarta Cactus框架的创建者,还是 Maven、Gump、MockObjects开发团队的积极参与者。在4年中,他担任了几个大项目(大多数是J2EE构架)的技术构架师,之后他就和别人一起创立了 Pivolis 并担任CTO。 Pivolis公司专注于把敏捷方法应用于软件外包。在白天,Vincent是一位顾问和演讲者;在晚上,他是开源软件的开发者。Vincent目前居住在法国巴黎,可以通过他的 blog http;//blogs.codehaus.org/people/vmassol/来联系他。
迄今为止,测试还是人类所能找到的能确保交付的软件正常运行的最好方法。本书是四年来在测试领域研究和实践的成果。实践来自我的IT咨询背景——我曾先后在Octo Technology公司和Pivolis公司供职;研究则来自我在晚上和周末所从事的开源(open source)开发工作。自1982年开始(那还是我编程生涯的早期)我就对编写能帮助开发者写出更好代码并且提高开发速度的工具感兴趣了。这一兴趣引导我进入了软件咨询、质量改进等领域。近来,我在建立“持续构建(continuous-build)”平台,同时也在探索最佳开发实践。这两者都需要完善的test suite 来支持。测试同编码活动越接近,从代码获得反馈就越快,所以我对单元测试很感兴趣。单元测试与编码活动如此接近,以至于现在如同编写代码那样成了开发活动的一部分。于是,我参与了一些同软件质量相关的开源软件项目。它们是:· Cactus,用于对J2EE组件进行单元测试 (http://jakarta.apache.org/cactus/)。
· Mock Objects,用于对任何代码进行单元测试 (http://www.mockobjects.com/)。· Gump,用于持续构建 (http://jakarta.apache.org/gump/)。· Maven,用于构建和持续构建 (http://maven.apache.org/)。· PatternTesting,用AOP来检查构架和设计规则,这是个概念验证性质的项目(http://patterntesting.sf.net/) 。参与了这些项目,JUnit in Action 这本书已是水到渠成。没人想编写糟糕的代码。我们都希望写出可以正常工作的代码,我们都希望能以自己的代码为荣。但是,常常事与愿违。你是否经常听到这样的话:“我们是想要写测试的,但在压力下没足够时间去写。”“我们一开始是写了单元测试的,但两星期后我们就没动力继续下去了,再往后我们就放弃编写单元测试了。”本书会教给你开开心心地编写高质量代码的工具和技能。本书手把手地教你如何高效地运用工具,避免常见的陷阱。本书将让你具备编写可以正常工作的代码的能力,还将帮你把单元测试引入日常开发活动,并建立起一套步骤,让你得以按部就班写出稳健的代码。最重要的是,本书向你展示了如何控制你软件的熵 ,而不是反过来被它控制。我想起了Lucretius在公元前94至公元前55年之间写就的On the Nature of Things中的一些章节(我就不列出拉丁文原文了):Lovely it is, when the winds are churning up the waves on the great sea, to gaze out from the land on the great efforts of someone else; not because it’s an enjoyable pleasure that somebody is in difficulties, but because it’s lovely to realize what troubles you are yourself spared.这正是你意识到自己已经用精良的test suite“武装”起来后的感觉。你会看到,别人还在蹒跚挣扎;你会感到欣慰,因为你拥有测试,可以用来阻止任何人(包括你自己)破坏你的应用程序。