Jsf 2 如何在junit中使用OmniFaces

Jsf 2 如何在junit中使用OmniFaces,jsf-2,junit,mocking,mockito,omnifaces,Jsf 2,Junit,Mocking,Mockito,Omnifaces,在我的测试方法中,我希望能够调用Ajax.oncomplete,它在内部调用: OmniPartialViewContext.getCurrentInstance 请告知如何做。我已完成以下工作: 1-使用FacesContextMocker类: public abstract class FacesContextMocker extends FacesContext { private FacesContextMocker() { } private static

在我的测试方法中,我希望能够调用
Ajax.oncomplete
,它在内部调用:

OmniPartialViewContext.getCurrentInstance 

请告知如何做。

我已完成以下工作:

1-使用FacesContextMocker类:

public abstract class FacesContextMocker extends FacesContext {
    private FacesContextMocker() {
    }

    private static final Release RELEASE = new Release();

    private static class Release implements Answer<Void> {
        @Override
        public Void answer(InvocationOnMock invocation) throws Throwable {
            setCurrentInstance(null);
            return null;
        }
    }

    public static FacesContext mockFacesContext() {
        FacesContext context = Mockito.mock(FacesContext.class);
        setCurrentInstance(context);
        Mockito.doAnswer(RELEASE).when(context).release();
        return context;
    }
}
FacesContext facesContext = FacesContextMocker.mockFacesContext();

        // mocking omnifaces OmniPartialViewContext to test Ajax.oncomplete
        OmniPartialViewContext omniPartialViewContext = Mockito
                .mock(OmniPartialViewContext.class);
        Map<Object, Object> map = facesContext.getCurrentInstance()
                .getAttributes();
        map.put(OmniPartialViewContext.class.getName(), omniPartialViewContext);
        Mockito.when(facesContext.getCurrentInstance().getAttributes())
                .thenReturn(map);
公共抽象类FacesContextMocker扩展FacesContext{
私有FacesContextMocker(){
}
私有静态最终版本=新版本();
私有静态类发布实现了应答{
@凌驾
公共Void应答(invocationmock调用)抛出可丢弃的{
setCurrentInstance(空);
返回null;
}
}
公共静态FacesContext mockFacesContext(){
FacesContext context=Mockito.mock(FacesContext.class);
setCurrentInstance(上下文);
Mockito.doAnswer(RELEASE).when(context.RELEASE();
返回上下文;
}
}
2-模拟OmniPartialViewContext对象如下所示:

public abstract class FacesContextMocker extends FacesContext {
    private FacesContextMocker() {
    }

    private static final Release RELEASE = new Release();

    private static class Release implements Answer<Void> {
        @Override
        public Void answer(InvocationOnMock invocation) throws Throwable {
            setCurrentInstance(null);
            return null;
        }
    }

    public static FacesContext mockFacesContext() {
        FacesContext context = Mockito.mock(FacesContext.class);
        setCurrentInstance(context);
        Mockito.doAnswer(RELEASE).when(context).release();
        return context;
    }
}
FacesContext facesContext = FacesContextMocker.mockFacesContext();

        // mocking omnifaces OmniPartialViewContext to test Ajax.oncomplete
        OmniPartialViewContext omniPartialViewContext = Mockito
                .mock(OmniPartialViewContext.class);
        Map<Object, Object> map = facesContext.getCurrentInstance()
                .getAttributes();
        map.put(OmniPartialViewContext.class.getName(), omniPartialViewContext);
        Mockito.when(facesContext.getCurrentInstance().getAttributes())
                .thenReturn(map);
FacesContext FacesContext=FacesContextMocker.mockFacesContext();
//模拟omnifaces OmniPartialViewContext以测试Ajax.oncomplete
OmniPartialViewContext OmniPartialViewContext=Mockito
.mock(OmniPartialViewContext.class);
Map Map=facesContext.getCurrentInstance()
.getAttributes();
map.put(OmniPartialViewContext.class.getName(),OmniPartialViewContext);
Mockito.when(facesContext.getCurrentInstance().getAttributes())
.然后返回(地图);

事实上,我正要发布一条评论,它只是存储为
FacesContext
属性,键为
OmniPartialViewContext.class.getName()