Mocking FacesContext

前端 未结 7 1073
执念已碎
执念已碎 2021-02-18 19:20

I am trying to add some unit tests to a JSF application. This application didnt rely heavily on any best practices, so many service methods use the FacesContext to

7条回答
  •  隐瞒了意图╮
    2021-02-18 20:00

    You could use for example PowerMock which is a framework that allows you to extend mock libraries like Mockito with extra capabilities. In this case it allows you to mock the static methods of FacesContext.

    If you are using Maven, use following link to check the needed dependency setup.

    Annotate your JUnit test class using these two annotations. The first annotation tells JUnit to run the test using PowerMockRunner. The second annotation tells PowerMock to prepare to mock the FacesContext class.

    @RunWith(PowerMockRunner.class)
    @PrepareForTest({ FacesContext.class })
    public class PageBeanTest {
    

    Mock FacesContext using PowerMock and use verify() of Mockito in order to check that resolveVariable() was called with the expected parameters.

    @Test
    public void testGetPageBean() {
        // mock all static methods of FacesContext
        PowerMockito.mockStatic(FacesContext.class);
    
        FacesContext facesContext = mock(FacesContext.class);
        when(FacesContext.getCurrentInstance()).thenReturn(facesContext);
    
        Application application = mock(Application.class);
        when(facesContext.getApplication()).thenReturn(application);
    
        VariableResolver variableResolver = mock(VariableResolver.class);
        when(application.getVariableResolver()).thenReturn(variableResolver);
    
        PageBean.getPageBean("bean_reference");
    
        verify(variableResolver)
                .resolveVariable(facesContext, "bean_reference");
    }
    

    I've created a blog post which explains the above code sample in more detail.

提交回复
热议问题