我正在使用JUnit测试一个web应用程序。此应用程序的buisness层是在EJB无状态类中编写的。所以我用JUnit和玻璃鱼进行“容器”测试。到目前为止,所有这些都很好,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中使用这个静态类来保护buisness代码,如下所示:
@Stateless
public class MyEJB {
public void doSomething(String login) {
if(MyStaticClass.verifyLogin(login)){
//do something
}
}
}在普通的Glassfish 4.1服务器中,静态类中的POJO注入可以正常工作。在Glassfish-embedded中,POJO注入失败,其中包含以下消息:
WELD-001303: No active contexts for scope type javax.enterprise.context.SessionScoped我认为这是因为没有Http会话绑定到它。是否有一种以编程方式模拟/创建SessionContext的方法?
谢谢。
发布于 2015-07-15 13:47:10
好吧,我终于找到解决办法了。我使用框架JMockit将静态类替换为模拟类,使用总是返回TRUE的假方法。(我已经对Mockito和PowerMock进行了测试,但两者都不起作用)。
https://stackoverflow.com/questions/31345091
复制相似问题