如何测试使用企业应用程序的EJB模块

时间:2014-03-04 09:20:19

标签: java java-ee junit glassfish ejb

我有这种情况:

  1. 企业应用程序。运行正常。 - >包含MyFacade
  2. 客户端申请。运行正常。
  3. Ejb模块。运行正常,但无法测试 - >包含MyClass.java
  4. DomainLibrary。 - >包含实体和远程接口。
  5. 我想运行第3点的测试文件。(ejb模块)。好的,首先我将企业应用程序运行起来。在第二位,我运行第3点的测试文件。 问题是无法找到企业应用程序中包含的远程接口ejb。

    错误1:最终出现以下输出的无限循环

    WARNING: AS-CDI-005 Okt 22, 2013 4:49:23 PM org.glassfish.weld.BeanDeploymentArchiveImpl handleEntry
    

    错误1:已解决 Running JUnit Tests on embedded glassfish 4 causing WARNING: AS-CDI-005

    错误2 !!!:

    javax.naming.NamingException: Lookup failed for [...] (MyFacade)
    

    Ejb模块:MyClass.java

    @Singleton
    public class MyClass implements MyClassLocal {
    
        @EJB(lookup = "java:global/EnterpriseApplication-ejb/MyFacade!com.mydomain.repository.MyFacadeRemote")
        private MyFacadeRemote myFacade;
    
        public MyClass() {
        }
    
        public void bussinesMethod(){
            System.out.println("Hello stackOverWorld! ");
        myFacade.findAll();
        }
    }
    

    测试方法:

    @Test
    public void testBusinessMethod() throws Exception {
        System.out.println("businessMethod");
    
        Map<Object, Object> properties = new HashMap<Object, Object>(); 
        properties.put(EJBContainer.APP_NAME, "MyEjbModule");
        properties.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.enterprise.naming.SerialInitContextFactory");
        EJBContainer container = EJBContainer.createEJBContainer(properties);
        MyClassLocal instance = (MyClassLocal)container.getContext().lookup("java:global/MyEjbModule/classes/MyClass!com.mydomain.MyClassLocal");
        //EJBContainer container = javax.ejb.embeddable.EJBContainer.createEJBContainer();
        //MyClassLocal instance = (MyClassLocal)container.getContext().lookup("java:global/classes/MyClass");
    
        instance.businessMethod();
        container.close();
    }
    

1 个答案:

答案 0 :(得分:2)

您可以使用我们为EJB应用程序执行的相同方法。你可以调用一些测试'单元测试',但它们实际上是集成测试。运行这些测试包括首先启动应用程序服务器,然后运行JUnit测试用例,最后停止服务器。这些测试用例充当客户端,加载ejb远程接口,进行适当的调用,验证返回值等,就像客户端一样。

其中一个问题是这些测试可能需要一段时间才能运行,具体取决于您拥有的测试数量。它还需要服务器启动并运行。

我知道必须有更好的方法,但这已经为我们的项目工作了大约10年。