当我使用来自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
答案 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;
}