blob: 5744782316c8e6dd823317f82776dee40a7310dd [file] [log] [blame]
= TestCase with TestBean inner-class The use of an inner-class annotated as an EJB can get you all the resources you may need to run your test case such as a UserTransaction, EntityManager, JMS Topic or Queue, DataSource, references to other EJBs, etc.
:jbake-type: page
:jbake-status: published
Simply add a _META-INF/ejb-jar.xml_ to your _test_ _sources_ and start annotating your inner class as needed.
The test logic can be placed inside the inner-class EJB or you can setup the EJB to pass the required resources to the outer class.
....
import junit.framework.TestCase;
import javax.ejb.Stateless;
import javax.ejb.TransactionManagement;
import static javax.ejb.TransactionManagementType.BEAN;
import javax.annotation.Resource;
import javax.transaction.UserTransaction;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceContextType;
import javax.persistence.EntityManager;
import javax.naming.Context;
import javax.naming.InitialContext;
import java.util.Properties;
public class MyTest extends TestCase {
private EntityManager entityManager;
private UserTransaction userTransaction;
@Override
protected void setUp() throws Exception {
Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.LocalInitialContextFactory");
// set any other properties
InitialContext initialContext = new InitialContext(p);
TestLocal testLocal = (TestLocal) initialContext.lookup("TestBeanLocal");
entityManager = testLocal.getEntityManager();
userTransaction = testLocal.getUserTransaction();
}
/**
* The src/test/resource/META-INF/ejb-jar.xml will cause this
* EJB to be automatically discovered and deployed when
* OpenEJB boots up.
*/
@Stateless
@TransactionManagement(BEAN)
public static class TestBean implements TestLocal {
@Resource
private UserTransaction userTransaction;
@PersistenceContext(type = PersistenceContextType.EXTENDED)
private EntityManager entityManager;
public UserTransaction getUserTransaction() {
return userTransaction;
}
public EntityManager getEntityManager() {
return entityManager;
}
}
public static interface TestLocal {
EntityManager getEntityManager();
UserTransaction getUserTransaction();
}
}
....