追求代码质量(11)-用aop进行防御性编程-java开发java经验技巧

追求代码质量(11)-用aop进行防御性编程-java开发java经验技巧

ID:30881206

大小:160.78 KB

页数:11页

时间:2019-01-04

追求代码质量(11)-用aop进行防御性编程-java开发java经验技巧_第1页
追求代码质量(11)-用aop进行防御性编程-java开发java经验技巧_第2页
追求代码质量(11)-用aop进行防御性编程-java开发java经验技巧_第3页
追求代码质量(11)-用aop进行防御性编程-java开发java经验技巧_第4页
追求代码质量(11)-用aop进行防御性编程-java开发java经验技巧_第5页
资源描述:

《追求代码质量(11)-用aop进行防御性编程-java开发java经验技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、追求代码质量(11):用AOP进行防御性编程-编程开发技术追求代码质量(11):用AOP进行防御性编程原文出处:IBM中国开发人员测试的主要缺点是:绝大部分测试都是在理想的场景屮进行的。在这些情况下并不会出现缺陷一一能导致出现问题的往往是那些边界情况。什么是边界情况呢?比方说,把?null?值传入一个并未编写如何处理?null?值的方法中,这就是一种边界情况。大多数开发人员通常都不能成功测试这样的场景,因为这没多大意义。但不管有没有意义,发生了这样的情况,就会抛出一个?NullPointerExcep

2、tion,然后整个程序就会崩溃。本刀,我将为您推荐一种多层面的方法,来处理代码中那些不易预料的缺陷。尝试为应用程序整合进防御性编程、契约式设计和-•种叫做OVal的易用的通用验证框架。将敌人暴露出来清单1中的代码为给定的?Class?对象(省去了?java.lang.Object,因为所有对象都最终由它扩展)构建一个类层次。但如果仔细看的话,您会注意到一个有待发现的潜在缺陷,即该方法对对象值所做的假设。清单1.不检验null的方法publicstaticHierarchybuildHierarchy(

3、Classclzz){Hierarchyhier二newHierarchyO;hier.setBaseClass(clzz);Classsuperclass二clzz.gctSuperclass();if(superclass!=null&&superclass.getName().equals(/zjava.lang.Object")){returnhier;}else{while((clzz.getSuperclass()!=null)&&(!clzz.getSuperclass().getNam

4、e().equals(/zjava.lang.Object"))){clzz二clzz.getSuperclass();hier.addClass(clzz);returnhier;}}刚编好这个方法,我还没注意到这个缺陷,但由于我狂热地崇拜开发人员测试,于是我编写了一个使用TestNG的常规测试。而且,我述利用了TestNG方便的?DataProvider?特性,借助该特性,我创建了一个通用的测试用例并通过另一个方法來改变它的参数。运行清单2中定义的测试用例会产生两个通过结果!一切都运转良好,不是吗

5、?清单2.验证两个值的TestNG测试importjava,util.Vector;importstaticorg.testng.Assert.asscrtEquals;importorg.testng.annotations.DataProvider;importorg.testng.annotations.Test;publicclassBui1dHierarchyTest{@DataProvider(name="class-hierarchies")publicObject[][]dataVal

6、ues(){returnnewObject[][]{{Vector,class,newString[]{/zjava.util.AbstractLisz/java,ut订.AbstractCollcctioiW{String,class,newString[]{}}};}@Tcst(dataProvidcr二"class-hierarchies"})publicvoidverifyHierarchies(Classclzz,String[]names)throwsException!Hierarchy

7、hier二HierarchyBuilder.buildHierarchy(clzz);assertEquals(hier.getHierarchyCleissNennes(),names,"valueswerenotequal");}至此,我还是没有发现缺陷,但一些代码问题却困扰着我。如果有人不经意地为?Class?参数传入一个?null?值会怎么样呢?清单1?中第4行的clzz.gctSuperclass()?调用会抛出一个?NullPointcrExccption,是这样吗?测试我的理论很容易;其

8、至都不用从头开始。仅仅把?{null,null}?添加到初始?Bui1dHierarchyTest?的?dataValues?方法中的多维?Object?数组中,然后再次运行它。我定会得到如图1所示的?NullPointerException:Gyrate4止■图L可怕的NulIPointerExceptionAG逢MZsFatedTestseaAdM(^iwo)0.venFytterttdtes3sw/)ttarMdm(i]=eExcapoan多1"a

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。