第五讲单元测试与Junit教程.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
答案(思考栈的测试方法) 对于空栈 isEmpty=true,pop(),top(),抛异常。 push(“字符”),top(),返回刚压入的字符串,isEmpty()=false。 多次调用push();验证每一次top()。 push(null),top()=null。 发生异常后,栈仍可以使用。 6. MOCK对象简介 6.1 MOCK对象 概念: MOCK对象是真实对象在调试期间的替代品。 简单的替换 一般,我们建议对应用程序范围外的功能调用进行包装。 因为被测试代码只会通过接口来引用对象,所以它完全不知道它引用的究竟是真实对象还是mock 对象。 在产品环境(卖给客户的真正的代码)中,当初始化这个类的对象时,传入的是一个真实的systemEnvironment,而另一方面,测试代码传入的是则是mockSystemEnvironment。 6.2 什么情况下使用MOCK对象 真实对象行为不确定(如股票行情)。 真实对象很难被创建。 真实对象的某些行为很难被触发。 真实对象令程序的运行很慢。 真实对象有(或者是)用户界面。 测试含有回调函数。 真实对象并不存在。 6.3 使用MOCK对象的步骤 使用一个接口来描述这个对象。 为产品代码实现这个接口。 以测试为目的,在MOCK对象中实现这个接口。 练习:实现MP3的MOCK对象 import java.util.ArrayList; public interface Mp3Player { public void play(); public void pause(); public void stop(); public double currentPosition(); public String currentSong(); public void next(); public void prev(); public boolean isPlaying(); public void loadSongs(ArrayList names); } 7. 单元测试与软件设计 7.1 软件设计关注的几个层面 通过面向测试的软件设计,更好地分离关注点。 通过测试驱动的方法,改善接口设计。 确立和局部化验证的责任。 7.2 面向测试的软件设计 例: public void sleepUtilNextHour throws InterrupedException{ int howlong; ……计算休眠时间的一系列代码 Thread.sleep(howlong); Return; } 等一个小时? 设一个计时器,调用这个函数,等结束后回来再检查时间,如果失败了,再来处理一下,重新测试? 7.3 面向测试的软件设计 重构代码 public void sleepUtilNextHour throws InterrupedException{ int howlong=milliSecondsTONextHour(new Date()); Thread.sleep(howlong); Return; } 测试: asserEquals(10000, milliSecondsTONextHour(TEST_DAY_10)); 如果测试代码非常丑陋或难写,暗示软件设计需要调整。 7.5 测试驱动开发(一) 例如:一个把标准纸张规格输出的方法 addCorpMarks(PPstream str,int paper_width, int paper_height, int body_width, int body_height); 测试代码 Public Process(){ addCorpMarks(str,8.5,11,6,8.5); ………. addCorpMarks(str,8.5,11,6,8.5); addCorpMarks(str,8.5,11,6,8.5); } 7.5测试驱动开发(二) 把标准纸张尺寸定义抽出成为一个类后,测试代码变为: Public Process(){ PaperSpec p1=new PaperSpec(8.5,11,6,8.5); PaperSpec p2=new PaperSpec(5,7,4,5); addCorpMarks(str,p1); addCorpMarks(str,p2); } 7.5 测试驱动开发(三) 因为纸张是标准的,所以再把张纸的取得抽象为一个工厂类: Public class StandardPaperFactory(){ public static PaperSpec getA4Instance(); public

文档评论(0)

502992 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档