关闭

使用 JUnit 在 VisualAge for Java 中对 EJB 进行单元测试

发表于:2008-2-22 15:40

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:网络转载

  本文面向的是那些想要对他们的 EJB 进行单元测试以及为这些 EJB 开发测试案例的 VisualAge® for Java™ 用户。本文基于 VisualAge for Java 3.5.3 和 JUnit 3.7。文章描述了 JUnit、对 EJB 进行单元测试的难点以及开发测试案例时涉及到的相关步骤。
© Copyright International Business Machines Corporation 2002. All rights reserved.

引言

  本文面向的是那些想要对他们的 EJB 进行单元测试以及为这些 EJB 开发测试案例的 VisualAge® for Java™ 用户。本文基于 VisualAge for Java 3.5.3 和 JUnit 3.7。文章描述了 JUnit、对 EJB 进行单元测试的难点以及开发测试案例时涉及到的相关步骤。

  单元测试是以程序员的视角来编写的。单元测试确保一个类的某个特定的方法能成功地执行一组特定的任务。每个测试确定一个方法在给定已知的输入时能产生预期的输出。有效测试是有效编程的一个基本的组成部分。通过使用 JUnit 测试框架,您能容易地并且逐步地构建一个测试套件,这个测试套件能帮助您调节工作进度、发现不希望出现的副作用并把精力集中在开发工作上。

编写 EJBs 测试案例

  这里是一个关于 EJB 的示例,该 EJB 带有一个名为 addition 的业务方法,该方法以两个整型变量作为输入,将它们相加后返回结果:

/**
* This is a Session Bean Class
*/
public class SampleEjbBean implements SessionBean { 
   private javax.ejb.SessionContext mySessionCtx = null; 
   final static long serialVersionUID = 3206093459760846163L;
   
/**
 * Insert the method's description here.
 * Creation date: (8/10/02 1:16:33 PM)
 * @return int
 * @param a int
 */ 
//The Business method    
public int addition(int a,int b) { 
   return a+b;
}
public void ejbActivate() throws java.rmi.RemoteException {...}
public void ejbCreate() throws javax.ejb.CreateException, java.rmi.RemoteException {...}public void ejbPassivate() throws java.rmi.RemoteException {...}
public void ejbRemove() throws java.rmi.RemoteException {...}
public javax.ejb.SessionContext getSessionContext() { 
   ..... 
}
public void setSessionContext(javax.ejb.SessionContext ctx) throws java.rmi.RemoteException { 
   .....    
}
}
  使用下列步骤创建一个 EJB 测试案例。

  1. 通过继承JUnit.framework.TestCase类创建一个测试类。命名约定:如果 bean 的名称是SampleEjbBean,则将测试类命名为SampleEjbBeanTest。例如:
    public class SampleEjbBeanTest extends JUnit.framework.TestCase{
  2. 创建 Bean 的一个remoteInterface类型的类变量。例如:
    SampleEjb remoteInterface
  3. 创建测试类的一个静态实例:
    static {  
       instance = new SampleEjbBeanTest(""); 
    }

    因为该实例被用来作为 TestRunner 的 run 方法的一个参数以执行 TestClass.main 方法和测试案例,所以您可以在 SwingUI 或者 TextUI 中执行测试案例:

    public static void main(String args[])
    { 
       if (args.length > 0){  
          if (args[0].equals("SWING")) {  
             JUnit .swingui.TestRunner.run(instance.getClass());   
          }  
          else { 
             JUnit .textui.TestRunner.run(instance.getClass());
          }  
      }  
      else {
          //formatting the Output  
          System.out.println("************************************");   
          String className = instance.getClass().getName(); 
          className = className.substring(className.lastIndexOf(".")+1);
          System.out.println("Test Report of:"+className);
          System.out.println("************************************"); 
          JUnit.textui.TestRunner.run(instance.getClass()); 
       }
    }

  4. 接着,创建一个用于连接运行在服务器上的 EJB bean 的方法并为远程接口创建句柄:
    1. 将初始上下文添加到 HashMap 中。例如:
      env.put(Context.INITIAL_CONTEXT_FACTORY,"com.ibm.ejs.ns.jndi.CNInitialContextFactory
    2. 将 URL 添加到 HashMap 中。例如:
      env.put(Context.PROVIDER_URL, "iiop://localhost:900");
    3. 创建InitialContext对象。例如:
      javax.naming.InitialContext ic =new javax.naming.InitialContext(env);
    4. 通过在命名服务器中查找 EJB Alias 名称来构造 Bean 的一个homeInterface例如:
      SampleEjbHome homeInterface = (SampleEjbHome) ic.lookup("SampleEjb");
    5. 通过调用homeInterfacecreate方法创建一个remoteInterface。 例如:
      remoteInterface = homeInterface.create();
      Public void getConnection() 
         {  
            getinfo("Running " + this.toString());
         
            java.util.Hashtable env = new Hashtable();
         
         //Adding the Initial Context to the HashMap.
         env.put(Context.INITIAL_CONTEXT_FACTORY,"com.ibm.ejs.ns.jndi.CNInitialContextFactory
      ");  
            env.put(Context.PROVIDER_URL, "iiop://localhost:900"); 
            try  
            {   
               getinfo("Creating an initial context");   
               javax.naming.InitialContext ic =new javax.naming.InitialContext(env);   
               getinfo("Looking for the EJB " + "SampleEjb");   
               SampleEjbHome homeInterface =   
               (SampleEjbHome) ic.lookup("SampleEjb");   
               getinfo("Creating a new EJB instance");   
               remoteInterface = homeInterface.create();  
            }  
            catch (NamingException e)  
            { 
               getinfo(e.toString());   
               fail();  
            }  
            catch (Exception e)  
            {   
               getinfo("Create Exception");   
               getinfo(e.toString());   
               fail();  
            }
      }

31/3123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号