Макет 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

Другие вопросы по тегам