2014-10-29 4 views
2

내 백업 콩을 테스트합니다 :모의 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://legalargumentexception.blogspot.co.uk/2011/12/jsf-mocking-facescontext-for-unit-ests.html#mockFacesCurrentInstance 또는 http://stackoverflow.com/questions/4252353/mocking -facescontext – kaos

답변

2

사용 PowerMockMockito을 확장 : 다음은 그것을 사용하는 방법의 예입니다.

Maven을 사용하는 경우 다음과 같이 link을 사용하여 필요한 종속성 설정을 확인하십시오.

이 두 주석을 사용하여 JUnit 테스트 클래스에 주석을 답니다. 첫 번째 주석은 JUnit에게 PowerMockRunner을 사용하여 테스트를 실행하도록 지시합니다. 두 번째 주석은 PowerMock에서 FacesContext 클래스 모의를 준비한다고 알려줍니다.

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

모의 FacesContextPowerMock를 사용하여. Mockitoverify() 메서드를 사용하여 addMessage() 메서드가 호출되었는지 확인하십시오. 에서 addMessage() 메서드 호출로 전달 된 FacesMessage을 검색하려면 ArgumentCaptor을 사용하십시오. 그런 다음 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