


全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
即便开发人员知道测试的益处,我们也会发现程序员们不愿意测试他们的代码。他们会列出各种理由,如时间不够、没有有效的工具以及在编写带有许多有依赖关系的对象的测试方面有问题。对于单元测试的常见异议在深入探讨模拟对象之前,让我们先来看一下以下两点异议。花费时间太长我们很早就认识到这样一个原则“做事情需要花费时间”,特别当这些事情值得去做。很少的开发人员会怀疑整体测试的价值,因此我们需要考虑如何定义“太长”这个词的含义。开发人员们缺乏耐心,他们想要的是结果。他们喜欢写代码、运行代码然后看结果。从这一点来说,单元测试对他们有帮助。单元测试满足开发人员们的及时需求,但是许多程序开发人员认为编写测试占据了他们编写应用程序代码的时间,而他们的工作是按照后者计算报酬的。当然如果您仅仅按照程序开发人员在一个特定时间创建的应用程序代码的行数(或者一些其他方法)来计算的话,这一点是正确的。但是我们必须考虑每行代码所承载的全部时间。如果每当代码编译完成并运行通过我们就停止计算的话,我们可能会忽略掉创建软件最重要的部分消除缺陷。在软件开发周期中越晚发现缺陷,修复缺陷所花费的代价会随之成倍增长。在开发过程中许多预先的质量检验会多占用一点点时间,但是会在以后节约大量时间。这一点已经被许多研究所证实。仍有许多程序设计人员认为找出他们代码中的错误是其他一些人的工作。我发现近十年来这种情况已经有了显著的改进,但是仍有大量的程序人员并没有为他们的工作负全责,他们也不使用有助于改进他们代码的工具和技术。在早期的软件工程课程中我向我的学生们介绍过单元测试。我告诉他们如何使用现代工具编写测试。我布置了关于编写单元测试的作业。然而,当给他们机会在工作中采用有效的单元测试时,只有25%的学生这样做。原因是什么呢?因为他们还没有意识到测试的重要性。他们的直觉战胜了理性。他们知道单元测试的价值,但他们选择不予理会。单元测试并不需要花费很长时间,但许多程序设计员认为它需要。作为一名教育工作者,我需要努力地在学生们职业生涯的早期就改变这一认识,并在他们整个学习过程中不断的加以强化。商业组织必须跟上步伐,在他们雇用毕业生时使得单元测试成为一份宝贵的实践。低效的工具这充其量是一个乏味的借口。在今天有很多有效的单元测试工具可供开发人员们使用。不管您使用的是什么程序语言或者其他的开发工具,单元测试工具都可以供您使用。许多工具都是开源或者免费的。我选择 Eclipse 作为我的主要开发环境。在我现有的 Eclipse 配置里可以得到的所有单元测试工具中,我主要使用的是 Junit 测试框架。大多数 Java 设计人员都知道 Junit 并且大概至少使用过一次。JUnit 是 Eclipse 的 Java 开发工具中的一个完整部分。这个平台使得创建 Junit 测试变得简单。我只需在浏览器包里选择一个 Java 源文件,并在右击已选文件时从关系菜单里选择 NewJUnit Test Case(见图1)即可。提供的支持包括在测试中为类自动创建测试方式以及更多的东西。运行测试和创建一样简单。Eclipse 带有一个独立的视图可以观察 Junit 测试的结果。图:在 Eclipse 中创建一个 Junit 测试Eclipse 中集成了大量的单元测试工具。其中许多是基于 Junit 并在性能上有所扩充。我让我的学生们在面向对象的设计类中使用 Coverlipse 插件程序来检测他们的测试的代码覆盖率。我希望在他们所有的应用程序代码中有100%的覆盖率。一开始他们不喜欢这样,但是到了期中,他们的测试的覆盖率通常都达到100%。我已经为 TestNG,、djUnit、 Eclipse Test 和 Performance Tools Platform (TPTP) 安装了插件程序。其中每一个都有一组特性支持有效的单元测试。关键是有大量合适的单元测试工具提供给每一个开发人员,因此缺少工具不再被认为是没有创建单元测试的理由。测试带有复杂的依赖性?使用模拟对象一个好的单元测试检测一个独立的方法。在一个设计良好的系统里,对象们协同工作共同完成一项任务;因此,为了检验一种方法,通常我们需要提供使得这种方法完成其任务的其他对象。企业应用程序里的对象相当复杂,很难创建,并且他们的状态依赖外部的对象。一个数据库相关的应用程序有许多这样的对象,如连接、语句、结果集等等。我们想要单元测试简单快速的执行。如果我们需要在每次单元测试前将数据库重新设置到一个已知状态,那么测试会相当复杂并且运行速度自然会比我们期望得要慢。简化单元测试的一个流行技巧就是创建仅用于测试中的模拟对象。为了达到快速测试的目的,我们创建模拟对象来代替真实的对象。模拟对象被 Tim Mackinnon、 Steve Freeman 和 Philip Craig 1 所支持并成为单元测试工具箱的主要组成部分。一些书籍和论文讲述了如何在单元测试中使用模拟对象,描述的是模拟对象应该具备的能力以及如何使用他们。尽管如此,在没有任何基础的情况下开始创建模拟对象是相当困难的。我们希望能够自动完成这项任务。有一些软件工具,像 EasyMock, 2 提供了自动帮助功能,但是它们可能很复杂而且也很难使用。此外,他们不是总能够与我们其他的开发工具兼容。但是利用现有的工具可以有一些创建模拟对象或是相当能力的简单方法。文章后面的部分将展示利用 Eclipse 平台做到这一点的一些方法。从接口创建模拟对象面向对象的设计专家建议我们对接口进行编程。如果我们这样做,设计会更加新颖、灵活并且对变化反应灵敏。我们来看这样一个对接口编程例子,我们使用 Java JDBC API 来操作数据库。我们将考虑基于 JDBC API Tutorial and Reference, Second Edition 一书
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度校园周边交通秩序维护及学生出行安全保障服务协议
- 2025年绿色建筑行业专用脚手架采购与生态环保评估协议
- 2025年度精密仪器全维检测与保养技术支持协议
- 2025年高校知识产权数字化管理平台建设与运营维护服务合同
- 2025年网红美食街区特色档口品牌授权及运营合作协议
- 2025年度智能化办公楼清洁维护及阶段性验收服务合同
- 2025年时尚购物中心装修升级项目监理及施工合同文本
- 2025年高效农业科技示范项目综合开发贷款协议
- 2025年企业专车租赁及出行意外保险服务协议
- 2025年加绒衬衫行业研究报告及未来行业发展趋势预测
- 安全施工课件
- GB/T 45013-2024精细陶瓷基片的热疲劳试验方法
- 2022-2023年铁矿粉购销合同协议书范本
- DB11T 1833-2021 建筑工程施工安全操作规程
- 学校网络与信息安全检查表
- CTF信息安全竞赛理论知识考试题及答案
- 石油化工劳务分包合同
- 班费收支情况明细表格
- 中国偏头痛诊治指南(第一版)2023解读
- 成人手术后疼痛评估与护理-中华护理学会团体标准2023
- 湖北省武汉市2024-2025学年高一上学期入学分班考试 数学模拟卷
评论
0/150
提交评论