使用PowerMock扩展Mockito,以便您能够模拟FacesContext
.
如果您使用的是 Maven,请使用以下链接检查所需的依赖项设置。
使用这两个注释来注释您的 JUnit 测试类。第一个注释告诉 JUnit 使用PowerMockRunner
. 第二个注释告诉PowerMock准备模拟FacesContext
类。
@RunWith(PowerMockRunner.class)
@PrepareForTest({ FacesContext.class })
public class PageBeanTest {
FacesContext
使用PowerMock进行模拟。使用Mockito verify()
方法确保addMessage()
调用了该方法。使用 anArgumentCaptor
来检索FacesMessage
传递addMessage()
给FacesContext
. 然后运行assertEquals()
以检查是否设置了正确的值FacesMessage
。
@Test
public void test() {
// mock all static methods of FacesContext
PowerMockito.mockStatic(FacesContext.class);
FacesContext facesContext = mock(FacesContext.class);
when(FacesContext.getCurrentInstance()).thenReturn(facesContext);
MessageDisplayer messageDisplayer = new MessageDisplayer();
messageDisplayer.showMessage(FacesMessage.SEVERITY_INFO, "summary", "detail");
// create an ArgumentCaptor for the FacesMessage that will be added to
// the FacesContext
ArgumentCaptor<FacesMessage> facesMessageCaptor = ArgumentCaptor
.forClass(FacesMessage.class);
// verify if the call to addMessage() was made and capture the
// FacesMessage that was passed
verify(facesContext).addMessage(Mockito.anyString(),
facesMessageCaptor.capture());
// get the captured FacesMessage and check the set values
FacesMessage message = facesMessageCaptor.getValue();
assertEquals(FacesMessage.SEVERITY_INFO, message.getSeverity());
assertEquals("summary", message.getSummary());
assertEquals("detail", message.getDetail());
}
我创建了一篇博文,更详细地解释了上述代码示例。