0

当我使用来自 CODI 的 @ViewAccsessScoped bean 时,在使用 Arquillian 测试我的 bean 时出现以下错误。

org.jboss.arquillian.test.spi.ArquillianProxyException: org.jboss.weld.context.ContextNotActiveException : WELD-001303 范围类型 org.apache.myfaces.extensions.cdi.core.api.scope.conversation.ViewAccessScoped 没有活动上下文

有没有办法让它工作?

//三连

4

2 回答 2

0

您可以检查 GroupedConversationContext#isActive 以了解这是您的设置问题还是 Arquillian 问题。他们只是使用标准的 JSF API 来进行检查。

于 2013-05-13T07:35:44.560 回答
0

我试图模拟 FacesContext 并让它工作,但不知道这是否是最好的方法。我在做模拟时使用了 Mockito。

    FacesContext mock = null;

    final Map<Object, Object> attributes = new HashMap<Object, Object>();

    public void mockFacesContext() {

        if (mock == null) {
            mock = Mockito.mock(FacesContext.class);

            try {
                Method m = FacesContext.class.getDeclaredMethod(
                        "setCurrentInstance", FacesContext.class);
                m.setAccessible(true);
                m.invoke(FacesContext.class, mock);

            } catch (Exception e) {
                e.printStackTrace();
            }

            Mockito.when(mock.getAttributes()).thenReturn(attributes);

            ExternalContext ext = Mockito.mock(ExternalContext.class);
            Mockito.when(ext.getSession(false)).thenReturn(
                    Mockito.mock(HttpSession.class));

            Mockito.when(mock.getExternalContext()).thenReturn(ext);

            UIViewRoot uiViewRoot = Mockito.mock(UIViewRoot.class);
            Mockito.when(uiViewRoot.getViewId()).thenReturn("/test");
            Mockito.when(uiViewRoot.getLocale()).thenReturn(new Locale("se"));
            Mockito.when(mock.getViewRoot()).thenReturn(uiViewRoot);

            Application application = Mockito.mock(Application.class);
            Mockito.when(application.getSupportedLocales()).thenReturn(
                    Mockito.mock(Iterator.class));

            Mockito.when(mock.getApplication()).thenReturn(application);

        }
        return mock;
    }
于 2013-05-23T07:02:08.407 回答