2016-05-30 29 views
0

中止() - 方法:如何测试FacesContext中显示的消息使用JUnit

public void abort() { 
    LOG.info("some-text"); 
    warning("some-text"); 
} 

警告() - 方法:

public void warning(String message) { 
    FacesContext.getCurrentInstance() 
.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "INFO:", message)); 
} 

我想写一个测试用例的中止至极IS只是验证没有任何变化,另一个正在验证警告()正在工作的测试用例。 我知道这两个方法不需要单元测试,但我想知道这是否可能。用于显示p:消息的UI-Test运行良好,但我希望在Unittest之前检查Caption,Typ和Message,因为它运行速度更快。

回答

0

工作液只使用JUnit从警告()在自己的阶级是这样4.11

独立的内容:

@Named 
@RequestScoped 
public class Resources { 
     @Produces 
     public FacesContext produceFacesContext() { 
       return FacesContext.getCurrentInstance(); 
     } 
} 

接下来,您需要定义一个ArgumentCaptor能赶上的FacesMessage您基于JUnit测试。我已将它创建为一个clss成员,它将在@before节中初始化,并在@teardown中获得null值。

private ArgumentCaptor<FacesMessage> facesMessageCaptor; 
@Before 
public void setUp() {facesMessageCaptor = ArgumentCaptor 
      .forClass(FacesMessage.class); 
} 
@After 
public void tearDown() { facesMessageCaptor = null; } 

现在你只需要两个@Mocks添加到您的测试类

@Mock 
Resources resourcesMock; 
@Mock 
FacesContext facesContextMock; 

所以,你做到了!这样写测试:

Mockito.doReturn(facesContextMock).when(resourcesMock).produceFacesContext(); 
// Execute Method 
cut.warning("SOME_DETAIL_TEXT"); 
// Verify interactions with the Resources and Faces and maybe others... 
verify(resourcesMock).produceFacesContext(); 
verify(facesContextMock).addMessage(Mockito.anyString() , 
       facesMessageCaptor.capture()); 
verifyNoMoreInteractions(...., resourcesMock, facesContextMock); 
// write assert (i´ve used hamcrast-corematchers - more readable) 
actualMessage = (FacesMessage) facesMessageCaptor.getValue(); 
assertThat(FacesMessage.SEVERITY_WARN, is(equalTo(actualMessage.getSeverity()))); 
assertThat(MY_TITLE, is(equalTo(actualMessage.getSummary()))); 
assertThat("DETAIL_TEXT", is(equalTo(actualMessage.getDetail()))); 
相关问题