java - JUnit 测试 FaceContext 和 Session 代码
问题描述
我正在尝试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");
}
}
解决方案
推荐阅读
- javascript - 防止同时单击具有相同类的按钮
- visual-studio-code - 如何更改 VSCode Jupyter Notebook 的单元格背景颜色?
- node.js - 在 try 块中返回未定义的函数
- wordpress - 如何在 woocommerce 中为我的数量添加重量单位?
- macos - 从 Dockerfile 构建 Docker 映像的问题
- postgresql - 使用事务在 AdonisJS 中插入关系
- angular - 如何在 mat-datepicker 中使用 GET 在输入字段中显示保存的日期?
- javascript - javascript在下拉单击时没有操作
- compiler-construction - 使用类型推断的静态类型语言中的元组解包到新变量和现有变量
- mysql - 如何解决与 sql_mode=only_full_group_by 不兼容的错误