首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在容器内的SessionScoped JUnit测试中

在容器内的SessionScoped JUnit测试中
EN

Stack Overflow用户
提问于 2015-07-10 15:48:50
回答 1查看 393关注 0票数 0

我正在使用JUnit测试一个web应用程序。此应用程序的buisness层是在EJB无状态类中编写的。所以我用JUnit和玻璃鱼进行“容器”测试。到目前为止,所有这些都很好,EJB都是使用查找函数注入的。下面是一个简单的测试用例:

代码语言:javascript
复制
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被注入到一个静态类中。就像这样:

代码语言:javascript
复制
public class MyStaticClass {

public static boolean verifyLogin(String login) {
    MySessionPojo mySessionPojo = CDI.current().select(MySessionPojo.class).get();
    return mySessionPojo.getLogin().equals(login);
}

}

EJB中使用这个静态类来保护buisness代码,如下所示:

代码语言:javascript
复制
@Stateless
public class MyEJB {

public void doSomething(String login) {
    if(MyStaticClass.verifyLogin(login)){
        //do something
    }
}
}

在普通的Glassfish 4.1服务器中,静态类中的POJO注入可以正常工作。在Glassfish-embedded中,POJO注入失败,其中包含以下消息:

代码语言:javascript
复制
WELD-001303: No active contexts for scope type javax.enterprise.context.SessionScoped

我认为这是因为没有Http会话绑定到它。是否有一种以编程方式模拟/创建SessionContext的方法?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-15 13:47:10

好吧,我终于找到解决办法了。我使用框架JMockit将静态类替换为模拟类,使用总是返回TRUE的假方法。(我已经对Mockito和PowerMock进行了测试,但两者都不起作用)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31345091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档