技术开发 频道

分析 JUnit 框架源代码

  情况 A:

  图 9. 自定义 TestSuite 流程图  

  当 suite 方法在 test case 中定义时,JUnit 创建一个显式的 test suite,它利用 Java 语言的 Reflection 机制找出名为 SUITE_METHODNAME 的方法,也即 suite 方法:     

suiteMethod = testClass.getMethod(SUITE_METHODNAME, new Class[0]);

  Reflection 是 Java 的高级特征之一,借助 Reflection 的 API 能直接在代码中动态获取到类的语言编程层面的信息,如类所包含的所有的成员名、成员属性、方法名以及方法属性,而且还可以通过得到的方法对象,直接调用该方法。 JUnit 源代码频繁使用了 Reflection 机制,不仅充分发挥了 Java 语言在系统编程要求下的超凡能力,也使 JUnit 能在用户自行编写的测试类中游刃有余地分析并提取各种属性及代码,而其它测试框架需要付出极大的复杂性才能得到等价功能。

  若 JUnit 无法找到 siute 方法,则抛出异常,流程进入情况 B 代码;若找到,则对用户提供的 suite 方法进行外部特征检验,判断是否为类方法。最后,JUnit 自动调用该方法,构造用户指定的 TestSuite:

  test = (Test)suiteMethod.invoke(null, (Object[]) new Class[0]);
0
相关文章