나는 Stateless Session Bean
을 만들고 테스트 클래스에 Entity Manager
을 주입했다. 난 경우 다른 사람의 코드가 필요합니다 게시 :
@Stateless(name = "TestProxy")
@Remote({TestProxyRemote.class})
public class TestProxy implements TestProxyRemote {
@PersistenceContext(unitName = "mph")
private EntityManager em;
@Override
public void persist(Object o) {
em.persist(o);
}
@Override
public void clear() {
em.clear();
}
@Override
public void merge(Object o) {
em.merge(o);
}
@Override
@SuppressWarnings({ "rawtypes", "unchecked" })
public Object find(Class classe, String key) {
return em.find(classe, key);
}
@Override
@SuppressWarnings({ "rawtypes", "unchecked" })
public Object find(Class classe, long key) {
return em.find(classe, key);
}
@SuppressWarnings("rawtypes")
@Override
public List getEntityList(String query) {
Query q = em.createQuery(query);
return q.getResultList();
}
}
public class MyTest {
@BeforeClass
public static void setUpBeforeClass() throws NamingException {
Properties env = new Properties();
env.setProperty(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
env.setProperty(Context.PROVIDER_URL, "localhost:1099");
env.setProperty("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");
jndiContext = new InitialContext(env);
try {
proxy = (TestProxyRemote) jndiContext.lookup("TestProxy/remote");
} catch (NamingException e) {
e.printStackTrace();
}
}
}
그럼 내가 엔티티의 모든 인스턴스를 검색하는 쿼리를 실행
proxy.getEntityList()
O를, 내가 필요로하는 개체를 얻을 수
proxy.find()
을 사용할 수 있습니다. 또는 원하는 경우 다른 방법을 추가 할 수 있습니다.
테스트 케이스 작성 방법은 무엇입니까? Arquillian 또는 OpenEJB와 같은 임베디드 EJB 컨테이너와 같은 통합 프레임 워크를 사용합니까? –
@PiotrNowicki 둘 다 시도했습니다 (프레임 워크로 mockito 사용). 어떻게 설정해야할지, 가져올 필요가 있는지는 모르겠다. 어쨌든 어떤 방법이든 상관 없다. – Simon
간단한 예가 있습니다 : http://stackoverflow.com/questions/6469751/testing-an-ejb-with-junit/20635285#20635285. 내 대답 좀 봐. –