尚学堂Java教程写给精明Java开发者测试技巧.docVIP

尚学堂Java教程写给精明Java开发者测试技巧.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
北京尚学堂提供 我们都会为我们的代码编写测试,不是吗?毫无疑问,我知道这个问题的答案可能会从 “当然,但你知道怎样才能避免写测试吗?” 到 “必须的!我爱测试”都有。接下来我会给你几个小建议,它们可以让你编写测试变得更容易。那会帮助你减少脆弱的测试,并保证应用程序更加健壮。 与此同时,如果你的答案是 “不,我不编写测试”,那么我希望这些简单但有效的技术可以让你了解编写测试带来的好处。你也会看到,编写一个复杂、没有价值的测试集(test suit)并没有你认为的那么难。 如何编写测试、有哪些用于管理测试集合的最佳实践这些主题并不新鲜。我们在过去已经就这个问题的某些方面讨论了很多次。从?“在构建过程中使用集成测试的正确方式”?到谈论“在单元测试中恰当地模拟环境”, 再到“?代码覆盖率以及如何找到哪些是你真正需要测试的代码”。 但是,今天我想和你谈论一系列小建议,这些建议可以帮助你在头脑中理清测试自下而上是如何运作的。从如何构造一个简单的单元测试到对 mock(模拟) 和 spy(监视) 以及复制粘贴测试代码更高层次的理解。那我们开始吧。 AAArrr,像海盗一样说话? 和大部分软件开发一样,模式通常都是一个不错的开始。无论是想要通过工厂来创建对象,或者希望将web应用程序中的关注点分散到Model、View和Controller中,在它们背后通常都会有一个模式,帮助你理解正在发生什么并解决困难。 那么,一个典型的测试看上去应该是怎么样的? 当我们编写测试时,其中一个最有用但却极其简单的模式是计划-执行-断言(Arrange-Act-Assert),简称AAA。 这个模式的前提是所有测试都应该遵循默认布局。测试系统所必需的全部条件和输入都应该在测试方法开始的时候被设置(Arrange)。在计划好所有前置条件后,我们通过触发一个方法或者检查系统的某些状态的方式,在测试系统上运行(Act)。最后,我们需要断言(Assert)测试系统是否已经生成了期望的结果。 让我们来看一个Java JUnit测试的示例,它展示了这种模式: 1 2 3 4 5 6 7 8 9 10 11 @Test public void testAddition() { ????// Arrange ????Calculator calculator = new Calculator(); ? ????// Act ????int result = calculator.add(1, 2); ? ????// Assert ????assertEquals(quot;Calculator.add returns invalid resultquot;, 3, result); } 看看代码流多么精准!计划-执行-断言模式可以让你快速理解测试的功能。偏离了这个模式后会很容易写出非常糟糕的代码。 牢记迪米特法则 迪米特法则在软件上面应用了最小知识原则,减小了单元的耦合——这一直是在开发软件的设计目标。 迪米特法则可以表述为一系列的规则: 在方法中,一个类的实例可以调用该类的其它方法; 在方法中,实例可以查询自己的数据,但不能查询数据的数据(译者注:即实例的数据比较复杂时,不能进行嵌套查询); 当方法接收参数时,可以调用参数的第一级方法; 当方法创建了一些局部变量的实例后,这个类的实例可以调用这些局部变量的方法; 不要调用全局对象的方法。 那么,就测试而言,这些意味着什么呢?好吧,由于迪米特法则减少了应用程序各部分之间的耦合,这意味着测试应用程序中的各个部分变得更加容易。为了要查看该法则如何为测试提供帮助,我们来看一个定义非常糟糕的类,它违背了迪米特法则: 考虑下面这个我们要测试的类: 1 2 3 4 5 6 7 8 9 10 public class Foo() { ????public Bar doSomething(Baz aParameter) { ????????Bar bar = null; ????????if (aParameter.getValue().isValid()) { ????????????aParameter.getThing().increment(); ????????????bar = BarManager.getBar(new Thing()); ????????} ????????return bar; ????} } 如果我们试着去测试这个方法,很快就会发现一些问题。这些问题是由于定义方法的方式导致的。 我们在测试这个方法时会遇到的第一个困难是,我们调用了一个静态方法——BarManager.getBar()。我们没有办法在单元测试中简单指定如何操作这个方法。还记得我们提过的计划-执行-断言模式吗?但在这里,在通过调用 doS

文档评论(0)

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

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

1亿VIP精品文档

相关文档