使用 PowerMock 扩展 Mockito 以便您能够模拟 FacesContext 的静态方法。
如果您使用的是 Maven,请使用以下 link 检查所需的依赖项设置。
使用这两个注释来注释您的 JUnit 测试类。第一个注释告诉 JUnit 使用 PowerMockRunner 运行测试。第二个注释告诉 PowerMock 准备模拟 FacesContext 类。
@RunWith(PowerMockRunner.class)
@PrepareForTest({ FacesContext.class })
public class PageBeanTest {
使用 PowerMock 模拟 FacesContext。使用 Mockito verify() 方法确保调用了 addMessage() 方法。使用ArgumentCaptor 来检索传递给FacesContext 上的addMessage() 方法调用的FacesMessage。然后运行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());
}
我创建了一个blog post,它更详细地解释了上述代码示例。