2014-10-29 51 views
2

我支持bean:模拟FacesContext的测试我的脸消息显示器类

@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测试这个类的任何帮助!

+0

请查看http://illegalargumentexception.blogspot.co.uk/2011/12/jsf-mocking-facescontext-for-unit-ests.html#mockFacesCurrentInstance或http://stackoverflow.com/questions/4252353/mocking -facescontext – kaos 2014-10-29 14:22:13

回答

2

使用PowerMock延长的Mockito,所以你可以嘲笑的FacesContext静态方法。

如果您使用的是Maven,请使用以下link来检查所需的依赖项设置。

使用这两个批注注释您的JUnit测试类。第一个注释告诉JUnit使用PowerMockRunner运行测试。第二个注释告诉PowerMock准备模拟FacesContext类。使用

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

模拟FacesContextPowerMock。使用Mockitoverify()方法确保调用addMessage()方法。使用ArgumentCaptor以检索传递给FacesContextaddMessage()方法调用的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,它更详细地解释了上面的代码示例。

+0

好帖子和博客文章+1。 – MWiesner 2017-12-01 20:19:09