blob: 3efa30f0ebaecea4c060fd8e7e94da243eb8c638 [file] [log] [blame]
Title: 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.
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();
}
}