2

我的支持豆:

@ManagedBean(name = "messageDisplayer")
@ViewScoped
public class MessageDisplayer implements Serializable
{
    private final Logger LOGGER = LoggerFactory.getLogger(this.getClass());

    public void showMessage (FacesMessage.Severity severity, String summary, String detail)
    {
        FacesContext context = FacesContext.getCurrentInstance();
        LOGGER.debug("Showing message with severity='{}', summary='{}', detail='{}'", severity, summary, detail);
        context.addMessage(null, new FacesMessage(severity, summary, detail));
    }
}

关于如何使用 Mockito 测试此类的任何帮助!?

4

2 回答 2

2

使用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());
}

我创建了一篇博文,更详细地解释了上述代码示例。

于 2014-11-09T20:09:39.330 回答
0

您应该使用 PowerMock 来模拟静态方法。以下是如何使用它的示例:https ://code.google.com/p/powermock/wiki/MockStatic

于 2014-10-29T14:12:16.463 回答