0
我正在使用JUnit測試一個Web應用程序。此應用程序的buisness層是在EJB無狀態類中編寫的。 因此,我使用JUnit和Glassfish嵌入來進行「容器」測試。 到目前爲止,所有工作都很好,EJB使用查找函數注入。 下面是一個簡單的測試情況:CDI SessionScoped在容器內JUnit測試中的POJO
public class SupportTest {
private static EJBContainer container;
private static MyEJB myEjb;
@BeforeClass
public static void setUpServices() throws NamingException {
Map<String, Object> properties = new HashMap<String, Object>();
properties.put(EJBContainer.MODULES, new File("target/classes"));
container = EJBContainer.createEJBContainer(properties);
myEjb = (MyEJB) container.getContext().lookup("java:global/classes/MyEJB");
}
@Test
public void test() {
myEjb.doSomething("user_login");
}
}
現在我有一個SessionScoped POJO(CDI),該保持的信息,如用戶登錄等。 這個Pojo是在靜態類中注入的。就像這樣:
public class MyStaticClass {
public static boolean verifyLogin(String login) {
MySessionPojo mySessionPojo = CDI.current().select(MySessionPojo.class).get();
return mySessionPojo.getLogin().equals(login);
}
}
這個靜態類在EJB用於保護樓內設有商務代碼,就像這樣:
@Stateless
public class MyEJB {
public void doSomething(String login) {
if(MyStaticClass.verifyLogin(login)){
//do something
}
}
}
內部正常的Glassfish的4.1服務器,該POJO的注入在靜態類內工作正常。 裏面的嵌入式Glassfish的,該POJO注入失敗,此消息:
WELD-001303: No active contexts for scope type javax.enterprise.context.SessionScoped
我想這是因爲沒有HTTP會話綁定到它。 有沒有辦法以編程方式模擬/創建àSessionContext?
謝謝。