使用openEJB在TestNG中使用EJB

时间:2013-06-02 00:05:20

标签: java annotations ejb testng openejb

我们正在使用AbstractOpenEJBTestNG类和openEJB来加载类。 许多类都加载了以下语句:

ejbJar.addEnterpriseBean(new StatelessBean(MyService.class));

但我也在课程顶部看到@EJB注释。我理解为,要在openEJB容器中加载EJB,我们需要使用上面的语句。但我不确定我们是否也可以使用@EJB注释。所以我们可以其中任何一个?或者每种方法的具体用例?

谢谢!

1 个答案:

答案 0 :(得分:0)

不确定我是否理解您的问题,但是要对EJB执行集成测试,您需要两件事:  1.首先,您需要让OpenEJB知道它可以在即将进行的测试中提供的任何EJB。这就是ejbJar.addEnterpriseBean(new StatelessBean(MyService.class)); 部分是为了。
 2.其次,您可以直接指定测试使用的所有EJB注入,就像在普通代码中一样。请记住,如果您在测试中调用的EJB依赖于任何其他EJB,则需要使用.addEnterpriseBean()方法指定所有EJB。例如:

public class SomeProcessingServiceIntegrationTest extends AbstractOpenEJBTestNG {

@EJB
SomeProcessingServiceLocal processingService;

@Module
public EjbModule beans() {

    EjbJar ejbJar = new EjbJar("processing");
    OpenejbJar openejbJar = new OpenejbJar();

    ejbJar.addEnterpriseBean(new StatelessBean(SomeProcessingService.class));
    ejbJar.addEnterpriseBean(new StatelessBean(DatabaseLookupService.class));
}
@Test
public void testProcessingService(){
     // Should return true for example
     assertTrue(processingService.process());
}
}

@Stateless
@Local(SomeProcessingServiceLocal.class)
public class SomeProcessingService {

@EJB
DatabaseLookupServiceLocal databaseLookupService;

    public boolean process(){
         return databaseLookupService.existsInDB();
    }
}