컨테이너 외부에서 EJB를 테스트하는 문제는 주입이 수행되지 않는다는 것입니다. 나는이 해결책을 발견했다. Stateless Session Bean에서 @PersistenceContext 을 독립 실행 형 Java-SE 환경에 보유하고 있으며 unittest에서 수행 할 수있는 entitymanager를 직접 삽입해야합니다. 이것은 emmbed 된 서버에 대한 빠른 대안입니다.
@Stateless
public class TestBean implements TestBusiness {
@PersistenceContext(unitName = "puTest")
EntityManager entityManager = null;
public List method() {
Query query = entityManager.createQuery("select t FROM Table t");
return query.getResultList();
}
}
unittest는 entitymanager를 인스턴스화하고 bean에 '주입'합니다.
public class TestBeanJUnit {
static EntityManager em = null;
static EntityTransaction tx = null;
static TestBean tb = null;
static EntityManagerFactory emf = null;
@BeforeClass
public static void init() throws Exception {
emf = Persistence.createEntityManagerFactory("puTest");
}
@Before
public void setup() {
try {
em = emf.createEntityManager();
tx = em.getTransaction();
tx.begin();
tb = new TestBean();
Field field = TestBean.class.getDeclaredField("entityManager");
field.setAccessible(true);
field.set(tb, em);
} catch (Exception ex) {
ex.printStackTrace();
}
}
@After
public void tearDown() throws Exception {
if (em != null) {
tx.commit();
em.close();
}
}
}
답변 해 주셨습니다. 도움이되었습니다. 이것은 일부 코드를 테스트하기위한 것입니다. JPA2의 사용법을 보여줄 일부 응용 프로그램을 실제로 실행하는 것이 좋습니다. – Cris