zoukankan      html  css  js  c++  java
  • 由InvocationTargetException引发的思考

          最近接到的项目,终于过了第一轮,兴奋之余还是要静下心来好好研究代码。第二轮得分只有60分,意料之中,做的时候就发现有很多不会的了,当时及时记录下来,所以这次看代码也有针对性的多。

          逻辑代码最大的问题还是出在异常处理上,有很多不合适的地方,不过经历过这次下次应该不会再犯了。测试依然疑问最多,很多莫名的异常不知道如何抛出,归根到底还是Java的基础不牢,不过这也不是一天两天的事情,见的多了自然熟悉。

          今天看到一个很常见的异常--InvocationTargetException,顾名思义,在反射机制中,如果当前执行的方法所调用的方法抛出异常,会被包装成这个异常,

    当然这在之前我是不知道的。因为在coding的时候,一写反射的语句,IDE会自动提示需要处理这个异常,于是乎很自然而然的就写上了catch(InvocationTargetException),不需要理由。可是当编写单元测试的时候问题就来了,你需要构造一套参数,让函数抛出这个异常以验证代码可以捕获这个异常。

          最一开始是从研究Winner的代码开始的,看到Winner写的对应的测试,很是摸不着头脑,不知道Winner的参数为何可以导致异常,上网查资料,除了API只外几乎没有任何资料,API中对于这个异常又描述甚少。手头的各种Java工具书这时候也派不上用场了。无计可施,只好请教学长。其实这个问题大家平时都遇到过,因为反射是TC上最常用到的技术之一,可能是因为太不显眼,所以大家之前都不约而同的无视它了。现在提出来,于是我们一起摸索。

         摸索的过程也是我学习的过程,很多思想我慢慢树立起来。构造异常测试,首先看配置文件,因为参数的不合法是导致异常的最常见原因。总之要充分利用项目文档所提供给我们的信息,这可以极大的提高开发的效率和质量。毕竟很多问题已经不需要我们去思考了,designer已经为我们考虑到,我们只需要照做。对于如此短的项目周期来说,这一点很重要。

         这个异常是反射机制定义的异常,自然在开发文档中找不到了。接下来我们还是走了小小的弯路,我们找来了JDK的源码......各种复杂的关系和调用,最终崩溃。放弃......不过我还是学了一小招。参考源码确实能解决很多问题,但是这在简单的类中比较实用。比如说String这样的类,里面的诸如substring ,spilt等方法可以给我们提供算法的灵感。

         学习Java最直接的工具还是API文档了。我无意间查到了抛出这个异常的newInstance方法,下面明确写着,当新建对象的类构造方法在被调用时抛出异常,此异常将被抛出。问题解决了:测试者提供的给构造方法的参数有两个,而此类构造方法只接受一个参数,于是乎异常被抛出。

         最终的答案是简单的,但是要是在项目开发中意识到这个问题难度还是很大的,需要有对项目足够的理解再加上足够的开发经验才能做到。对项目整体功能的把握和对每个细节精确的理解,是我所发现的最大差距所在,也将是我近期努力的目标。毕竟所掌握的技术和各种编码技巧不是一个技术人员价值的最大体现。严谨的思维和对细节的把握才是技术人员身上的闪光点,这是无可替代的。

  • 相关阅读:
    codevs 1115 开心的金明
    POJ 1125 Stockbroker Grapevine
    POJ 2421 constructing roads
    codevs 1390 回文平方数 USACO
    codevs 1131 统计单词数 2011年NOIP全国联赛普及组
    codevs 1313 质因数分解
    洛谷 绕钉子的长绳子
    洛谷 P1276 校门外的树(增强版)
    codevs 2627 村村通
    codevs 1191 数轴染色
  • 原文地址:https://www.cnblogs.com/ITEagle/p/1761315.html
Copyright © 2011-2022 走看看