Макет 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 для тестирования этого класса!?
2 ответа
Используйте PowerMock для расширения Mockito, чтобы вы могли имитировать статические методы FacesContext
,
Если вы используете Maven, используйте следующую ссылку, чтобы проверить необходимые настройки зависимостей.
Аннотируйте свой тестовый класс JUnit, используя эти две аннотации. Первая аннотация говорит JUnit запустить тест, используя PowerMockRunner
, Вторая аннотация говорит PowerMock подготовиться к издевательству над FacesContext
учебный класс.
@RunWith(PowerMockRunner.class)
@PrepareForTest({ FacesContext.class })
public class PageBeanTest {
издеваться FacesContext
используя PowerMock. Используйте Мокито verify()
способ убедиться, что addMessage()
метод был вызван. Используйте ArgumentCaptor
для того, чтобы получить FacesMessage
это было передано addMessage()
вызов метода на FacesContext
, Тогда беги 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());
}
Я создал пост в блоге, который объясняет приведенный выше пример кода более подробно.
Вы должны использовать PowerMock, чтобы высмеивать статические методы. Вот пример того, как его использовать: https://code.google.com/p/powermock/wiki/MockStatic