【问题标题】:Mock FacesContext to test my faces message displayer class模拟 FacesContext 来测试我的面孔消息显示类
【发布时间】:2014-12-25 06:20:03
【问题描述】:

我的支持豆:

@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 测试此类的帮助!?

【问题讨论】:

标签: maven jsf junit mockito facescontext


【解决方案1】:

使用 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,它更详细地解释了上述代码示例。

【讨论】:

  • 不错的博文和博文,+1。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-12
    • 2016-02-03
    • 2016-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-17
    • 2014-10-30
    相关资源
    最近更新 更多