在Arquillian中测试时如何使用ViewAccsessScope bean?

时间:2013-05-08 12:28:51

标签: java-ee-6 jboss-arquillian codi

当我使用来自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

无论如何都要让它发挥作用吗?

// Trind

2 个答案:

答案 0 :(得分:0)

您可以查看GroupedConversationContext#isActive以了解您的设置是否存在问题或Arquillian是否存在问题。他们只是使用标准的JSF API进行检查。

答案 1 :(得分:0)

我试图嘲笑FacesContext并且不知道这是否是最好的approch。 我在做模拟时使用了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;
    }