2013-06-02 68 views
0

我們使用AbstractOpenEJBTestNG類和openEJB來加載這些類。 許多類加載與下面的語句:在openNJB中使用TestNG中的EJB

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

但我也看到@EJB標註在類的頂部。我瞭解到,要在openEJB容器中加載EJB,我們需要使用上述語句。但我不確定我們是否也可以使用@EJB註釋。那麼我們可以選擇其中之一嗎?或者每種方法的具體用例?

謝謝!

回答

0

不知道如果我正確地理解您的擔心,但使用EJB進行集成測試需要兩件事:
1.首先,你需要做OpenEJB的知道任何的EJB可以在即將到來的測試提供的。這就是ejbJar.addEnterpriseBean(new StatelessBean(MyService.class)); 部分的用途。
2.其次,您可以直接指定您的測試使用的所有EJB注入,方法與您在普通代碼中所做的相同。請記住,如果您在測試中調用的EJB依賴於任何其他EJB,則需要使用.addEnterpriseBean()方法指定它們全部。例如:

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(); 
    } 
}