我们正在使用AbstractOpenEJBTestNG
class 和 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(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();
}
}