0

次のように、バッキング Bean メソッドを呼び出す junit テスト メソッドがあります。

myBackingBean.signup();

、バッキング Bean メソッドで への呼び出しがFaces.getLocale()あり、その行で null ポインター例外が発生します

UIViewRoot viewRoot = context.getViewRoot();

テスト メソッドでロケールを設定し、このエラーを修正する方法を教えてください。

4

1 に答える 1

2

解決策は次のとおりでした。

1- 次のクラスをプロジェクトに追加します。

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;
    }
}

2- テストの @Before で、次のコードを使用します。

FacesContext facesContext = FacesContextMocker.mockFacesContext();
    UIViewRoot uiViewRoot = Mockito.mock(UIViewRoot.class);
    Mockito.when(facesContext.getCurrentInstance().getViewRoot())
            .thenReturn(uiViewRoot);
    Mockito.when(
            facesContext.getCurrentInstance().getViewRoot().getLocale())
            .thenReturn(new Locale("en"));
于 2013-07-27T00:59:45.930 に答える