JUnit Тестирование FaceContext и Session Code - PullRequest
0 голосов
/ 07 февраля 2020

Я пытаюсь тестировать Junit (IDE: Intellij) Метод внутри класса с именем «ManagementDashboardBean» с именем: (Имя метода): init () Метод содержит FaceContext и Session. Я попробовал следующее: https://codenotfound.com/mockito-unit-testing-facescontext-powermock-junit.html, но все еще сталкиваюсь с проблемами. Я использую Mockito и PowerMockito, чтобы помочь, но не могу понять, что моя init () говорит об исключении нулевого указателя (NPE). Любое руководство будет с благодарностью. Спасибо

PS. Конечная цель - показать правильное покрытие тестового кода для этого метода.

   public void init() {
        FacesContext context = FacesContext.getCurrentInstance();
        HttpSession session = (HttpSession)context.getExternalContext().getSession(false);
        userInfo = (UserSessionInfo)session.getAttribute(ConstantsUtil.USER_INFO);

        startDt = FDUtil.toDate(FDUtil.toStartOfMonth(userInfo.getCurrentDateMillis()));
        endDt = FDUtil.toDate(FDUtil.toEndOfMonth(userInfo.getCurrentDateMillis()));

        autoCompleteDate = false;
    }

Текущий тест JUnit

package view.managed.core;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import javax.faces.application.FacesMessage;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

import com.sun.jdi.connect.Connector;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

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

public class ManagementDashboardBeanTest {

    private ManagementDashboardBean someBean;

    @Mock
    private FacesContext facesContext;
    @Mock
    private ExternalContext externalContext;

    @Before
    public void setUp() throws Exception {
        someBean = new ManagementDashboardBean();

        //mock all static methods of FaceContext using PowerMockito
        PowerMockito.mockStatic(FacesContext.class);

        when(FacesContext.getCurrentInstance()).thenReturn(facesContext);
        when(facesContext.getExternalContext()).thenReturn(externalContext);
    }

    @Test
    public void testInitContext() {
        //create Captor instances for the userInfo
//        ArgumentCaptor<String> clientIdCapture = ArgumentCaptor.forClass(String.class);
//        ArgumentCaptor<HttpSession> session = ArgumentCaptor.forClass(HttpSession.class);
        // Run the method being tested
//        someBean.init();

//        verify(facesContext).addMessage(clientIdCapture.capture(), (FacesMessage) session.capture());

    }

}

Фактический. java исходный файл начинается с:

public class ManagementDashboardBean extends EntityManagerService implements Serializable {

    private static final Logger LOG = LoggerFactory.getLogger(ManagementDashboardBean.class);

Сразу после этого это сбивает с толку черт возьми, из меня:

public ManagementDashboardBean() {
        init();
    }

Что я добавил до сих пор:


import static org.junit.Assert.*;
import javax.faces.context.FacesContext;
import mil.af.fd.view.managed.services.EntityManagerService;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnitRunner;
import org.powermock.core.classloader.annotations.PrepareForTest;
import java.io.Serializable;

@RunWith(MockitoJUnitRunner.class)
@PrepareForTest({FacesContext.class})

public class ManagementDashboardBeanTest {

    private ManagementDashboardBean dashboard;
    private Serializable serializableMock;
    private EntityManagerService entityManagerServiceMock;

    @BeforeClass
    public static void before() {
        System.out.println("Before Class");
    }

    @Before
    public void setUp() throws Exception {
        entityManagerServiceMock = Mockito.mock(EntityManagerService.class);
        serializableMock = Mockito.mock(Serializable.class);
        dashboard = new ManagementDashboardBean(serializableMock);
    }

    @Test
    public void testInitContext() {
//          dashboard.init();
        System.out.println("Test 1");
    }

}
...