Java 在TestNG和openEJB中使用EJB
我们正在使用Java 在TestNG和openEJB中使用EJB,java,annotations,ejb,testng,openejb,Java,Annotations,Ejb,Testng,Openejb,我们正在使用AbstractOpenEJBTestNGclass和openEJB加载这些类。 许多类都加载了以下语句: ejbJar.addEnterpriseBean(new StatelessBean(MyService.class)); 但我也在类的顶部看到了@EJB注释。我了解到,要在openEJB容器中加载EJB,我们需要使用上面的语句。但我不确定我们是否也可以使用@EJB注释。那么我们可以选择他们中的任何一个?或每种方法的任何特定用例 谢谢 不确定我是否正确理解了您的担忧,但要使用
AbstractOpenEJBTestNG
class和openEJB加载这些类。
许多类都加载了以下语句:
ejbJar.addEnterpriseBean(new StatelessBean(MyService.class));
但我也在类的顶部看到了@EJB
注释。我了解到,要在openEJB容器中加载EJB,我们需要使用上面的语句。但我不确定我们是否也可以使用@EJB注释。那么我们可以选择他们中的任何一个?或每种方法的任何特定用例
谢谢 不确定我是否正确理解了您的担忧,但要使用EJB执行集成测试,您需要两件事:
1.首先,您需要让OpenEJB知道它在即将到来的测试中可以提供的任何EJB。这就是
ejbJar.addEnterpriseBean(新的无状态bean(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();
}
}