CDI SessionScoped POJO在容器内JUnit测试中

时间:2015-07-10 15:48:51

标签: session junit glassfish ejb cdi

我正在使用JUnit测试Web应用程序。此应用程序的buisness层在EJB无状态类中编写。 所以我用JUnit和Glassfish嵌入式进行“容器”测试。 到目前为止一切正常,EJB使用查找函数注入。 这是一个简单的测试用例:

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 Session。 有没有办法以编程方式模拟/创建SessionContext?

感谢。

0 个答案:

没有答案