`
labile
  • 浏览: 42936 次
  • 来自: ...
文章分类
社区版块
存档分类
最新评论

交互测试接口的简单实现 reflect(反射) + XStream

阅读更多
交互测试接口的简单实现
 
1.       问题
或者你已经习惯了写 Hardcode JUnit Test Case。但这里有问题:
l         你写的代码要经过 Java compiler 才可运行,但实际的环境下不一定允许这样
l         很难用于交互测试与开发期的错误跟踪。不能要求你的交互测试环境总有一个 Java IDE。
 
上述问题在 Java Application 的 RMI 接口测试和错误跟踪时就更明显。
 
 
2.       解决方法
要做交互测试与错误跟踪,要面对的情况是不可料的,故很难用 Hardcode 的静态语言 Java 去做。但我对动态语言(如 BeanShell )也不大了解。但相对比较了解 Java 的反射机制与 XStream(http://xstream.codehaus.org/) 的从 XML 文本到 Java Object 的应用
 
Java 的 reflect(反射) + XStream 的 文本到 Object instance :
 
 
publicclass MyMethodInfo implements Comparable<MyMethodInfo> {
    public Method method;
 
    public MyMethodInfo(Method method) {
       this.method = method;
    }
 
    public String toString() {
       StringBuilder builder = new StringBuilder();
       builder.append( method.getName() ).append( " (" );
       Class[] params = method.getParameterTypes();
       for( int i = 0 ; i < params.length; i++ ) {
           builder.append( params[i].getSimpleName() );
           if( i < params.length - 1 ) {
              builder.append( ", " );
           }
       }
       builder.append( ')' );
       return builder.toString();
    }
 
    publicint compareTo(MyMethodInfo o) {
       returnthis.method.getName().compareTo( o.method.getName() );
    }
 
}
 
 
publicclass MethodArgPanel extends JPanel {
 
    privatestaticfinallongserialVersionUID = 1L;
    private JScrollPane jScrollPane = null;
    private JTextArea argTextArea = null;
 
    /**
     *Thisisthedefaultconstructor
     */
    public MethodArgPanel() {
       super();
       initialize();
    }
 
    /**
     *Thismethodinitializesthis
     *
     *@returnvoid
     */
    privatevoid initialize() {
       this.setSize(246, 230);
       this.setLayout(new BorderLayout());
       this.add(getJScrollPane(), BorderLayout.CENTER);
    }
 
    /**
     *ThismethodinitializesjScrollPane
     *
     *@returnjavax.swing.JScrollPane
     */
    private JScrollPane getJScrollPane() {
       if ( jScrollPane == null ) {
           jScrollPane = new JScrollPane();
           jScrollPane.setViewportView(getArgTextArea());
       }
       returnjScrollPane;
    }
 
    /**
     *ThismethodinitializesargTextArea
     *
     *@returnjavax.swing.JTextArea  
     */
    private JTextArea getArgTextArea() {
       if ( argTextArea == null ) {
           argTextArea = new JTextArea();
       }
       returnargTextArea;
    }
   
    public String getText() {
       returnargTextArea.getText();
    }
 
// @jve:decl-index=0:visual-constraint="10,10"
 
 
publicclass MainFrame extends JFrame {
 
    privatestaticfinallongserialVersionUID = 1L;
 
    private JPanel jContentPane = null;
 
    private JSplitPane mainSplitPane = null;
 
    private JSplitPane leftSplitPane = null;
 
    private JPanel cmdPanel = null;
 
    private JButton execButton = null;
 
    private JScrollPane argsScrollPane = null;
 
    private JPanel argsPanel = null;
 
    private JScrollPane resultScrollPane = null;
 
    private JTextArea resultTextArea = null;
 
    private JScrollPane methodScrollPane = null;
 
    private JList methodList = null;
 
    private MethodArgPanel[] methodArgPanels;
 
    private Object proxy;
 
    /**
     *ThismethodinitializesmainSplitPane
     *
     *@returnjavax.swing.JSplitPane
     */
    private JSplitPane getMainSplitPane() {
       if ( mainSplitPane == null ) {
           mainSplitPane = new JSplitPane();
           mainSplitPane.setDividerLocation( 200 );
           mainSplitPane.setRightComponent( getLeftSplitPane() );
           mainSplitPane.setLeftComponent( getMethodScrollPane() );
       }
       returnmainSplitPane;
    }
 
    /**
     *ThismethodinitializesleftSplitPane
     *
     *@returnjavax.swing.JSplitPane
     */
    private JSplitPane getLeftSplitPane() {
       if ( leftSplitPane == null ) {
           leftSplitPane = new JSplitPane();
           leftSplitPane.setOrientation( JSplitPane.VERTICAL_SPLIT );
           leftSplitPane.setDividerSize( 8 );
           leftSplitPane.setDividerLocation( 400 );
           leftSplitPane.setBottomComponent( getResultScrollPane() );
           leftSplitPane.setTopComponent( getCmdPanel() );
       }
       returnleftSplitPane;
分享到:
评论

相关推荐

    C++ reflect 反射

    本文将深入探讨C++的反射(reflect)特性,并通过一个简单的示例来展示如何实现类对象的方法调用。 反射的核心在于创建一种映射,将编译时的信息(如类型信息)转换为运行时的数据结构,这样就可以在运行时访问这些...

    反射+抽象工厂模式

    在Java编程中,"反射+抽象工厂模式"是一种高级的软件设计技巧,它结合了两种强大的设计模式,以实现高度灵活和可扩展的系统。反射允许程序在运行时检查类、接口、字段和方法的信息,并能动态地创建对象和调用方法。...

    cpp-reflect在C17中轻松实现反射和序列化

    而"cpp-reflect在C++17中轻松实现反射和序列化"的主题则探讨了在C++17标准下,如何利用预C++20的手段来实现类似的功能,这对于想要提前尝鲜或者在不支持C++20的编译器环境下工作的人来说非常有价值。 反射通常包括...

    Java中的reflect 反射的基本东西,

    - **元数据操作**:例如根据注解进行代码生成,ORM框架如Hibernate就是通过反射实现对象与数据库表之间的映射。 - **单元测试**:能够访问私有方法和字段,方便测试。 - **日志和监控**:动态跟踪和记录对象的行为。...

    浪曦经典Java代码--反射+代理reflection_proxy源码

    1. 类的动态生成:利用`java.lang.reflect.Proxy`动态生成实现了特定接口的代理类。 2. `InvocationHandler`的实现:这是代理的核心,定义了方法调用的实际行为。`invoke()`方法会处理所有通过代理对象发出的方法...

    详解Golang利用反射reflect动态调用方法

    ### Golang 反射 Reflect 动态调用方法详解 #### 一、引言 反射是许多现代编程语言中的一项重要特性,它允许程序在运行时检查和操作自身的内部结构。Go 语言同样具备这样的能力,它通过 `reflect` 包提供了一套...

    reflect反射实例_实用_没有废话

    4. 接口与反射:Go的接口提供了一种多态机制,而反射可以帮助我们检查一个值是否实现了特定的接口,或者将一个值转换为接口类型: ```go var iface interface{} = i if reflect.TypeOf(i).Implements(reflect....

    Java EE:Reflect 反射技术.docx

    Java EE的Reflect反射技术是Java编程语言中的一种核心特性,它允许程序在运行时动态地获取类的信息并进行操作。反射机制使得Java具备了强大的元数据操作能力,广泛应用于框架设计、插件系统、序列化、动态代理等场景...

    java中的反射reflect

    Java中的反射(Reflect)是Java语言的一个重要特性,它允许运行时访问类、接口、字段和方法的信息,甚至能够在运行时动态地创建对象和调用方法。反射在很多场景下都发挥着关键作用,比如在框架开发、插件系统、序列化...

    java反射与代理实现AOP

    ### Java反射与代理实现AOP #### 一、AOP概念及应用场景 AOP(Aspect-Oriented Programming,面向切面编程)是一种编程思想和技术,主要用于处理横切关注点问题,比如日志记录、性能统计、安全控制、事务处理、...

    java反射(reflect)

    Java反射(Reflect)是Java语言中的一个重要特性,它允许运行时的Java程序访问、操作类、接口、字段和方法的信息,甚至动态调用方法。在Java编程中,反射提供了强大的能力,可以用来实现一些高级功能,如元编程、...

    c++实现反射demo

    然而,目前这一特性尚未被所有编译器广泛支持,所以对于需要在现有环境工作的项目,上述自定义的反射实现仍然有其价值。 总的来说,"C++实现反射demo"展示了如何利用C++的模板和宏技术,模拟出类似于其他语言中的...

    Android平台与Web服务数据交互时运用Java反射机制解析数据的研究.pdf

    在数据交互过程中,使用Java反射机制可以实现域对象信息的动态解析,并封装成JavaBean类供应用程序使用。这种机制可以减少代码的重复和增加代码的复用,并提高数据交互的效率。 Java反射机制的实现主要是依赖java....

    [反射机制]简单实现ORM

    在Java中,`java.lang.reflect`包提供了反射相关的类和接口,如`Class`、`Field`、`Method`等,它们是实现反射的核心工具。 首先,我们需要了解`Class`类。每个类在运行时都有一个对应的`Class`对象,它包含了类的...

    java常用工具类 Reflect反射工具类、String字符串工具类

    Reflect反射工具类是Java反射机制的实现,提供了多种方法来操作类和对象。该工具类的主要方法包括: * `classForName(String name)`: 根据类名加载类对象 * `objectForName(String name)`: 根据类名生成对象实例 ...

    Java反射性能测试分析

    ### Java反射性能测试分析 #### 引言 Java反射机制是Java编程语言中一个强大的特性,它允许程序在运行时动态地访问、检测和修改类、接口、字段和方法等对象。然而,反射操作通常会引入额外的开销,这在性能敏感的...

    java反射JAVA REFLECT (java 反射)

    JAVA REFLECT (java 反射) 取得类的继承结构 - 类所在的包; |- public Package getPackage() - 类的声明方式; |-取得全类名:public String getName() |-只取类名: public String getSimpleName() - 类所继承...

    利用反射和代理实现简单的Spring

    如果没有实现接口,就会选择使用CGLIB库生成字节码实现类的代理。 现在,我们来看看如何利用反射和代理实现一个简单的Spring: 1. **依赖注入**:首先,我们需要一个配置类,其中包含bean的定义。这些定义可以是...

Global site tag (gtag.js) - Google Analytics