工作液只使用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())));