Java 如何在JUnit中模拟会话值(request.getSession())? private BankApp processSelection(HttpServletRequest), 字符串[]面,字符串选择文本){ DebugUtility.debug(日志,“进入JiraController::processDashBoardPortFolioSelection()”; BankApp项目=新BankApp(); List dataAgg=(List)request.getSession() .getAttribute(项目会话); if(CollectionUtils.isNotEmpty(dataAgg)){ 列表项目=新建ArrayList(); 用于(字符串currentProjectId:facets){ Project currProject=vendorUtils.getProjectDetails(currentprojectd); List sourceSystem=currProject.getSourceSytems(“JIRA”); List jiraProjects=new ArrayList(); sourceSystem.stream().forEach->jiraProjects.add(s.getAssociatedJiraProject()); 用于(BankApp项目数据:dataAgg){ if(jiraProjects.contains(projectData.getProjectKey())){ 项目。添加(项目数据); } } } 项目=processAllProjectsData(项目); project.setProjectKey(selectedText); project.setProjectScont(projects.size()); } DebugUtility.debug(日志,“进程中的项目DashboardPortfolioSelection::”+项目); DebugUtility.debug(日志,“退出JiraController::processDashBoardPortFolioSelection()”; 返回项目; }

Java 如何在JUnit中模拟会话值(request.getSession())? private BankApp processSelection(HttpServletRequest), 字符串[]面,字符串选择文本){ DebugUtility.debug(日志,“进入JiraController::processDashBoardPortFolioSelection()”; BankApp项目=新BankApp(); List dataAgg=(List)request.getSession() .getAttribute(项目会话); if(CollectionUtils.isNotEmpty(dataAgg)){ 列表项目=新建ArrayList(); 用于(字符串currentProjectId:facets){ Project currProject=vendorUtils.getProjectDetails(currentprojectd); List sourceSystem=currProject.getSourceSytems(“JIRA”); List jiraProjects=new ArrayList(); sourceSystem.stream().forEach->jiraProjects.add(s.getAssociatedJiraProject()); 用于(BankApp项目数据:dataAgg){ if(jiraProjects.contains(projectData.getProjectKey())){ 项目。添加(项目数据); } } } 项目=processAllProjectsData(项目); project.setProjectKey(selectedText); project.setProjectScont(projects.size()); } DebugUtility.debug(日志,“进程中的项目DashboardPortfolioSelection::”+项目); DebugUtility.debug(日志,“退出JiraController::processDashBoardPortFolioSelection()”; 返回项目; },java,spring-boot,session,junit,mockito,Java,Spring Boot,Session,Junit,Mockito,我们如何为这个方法编写junit测试用例?我在这里面临的挑战是我们需要模拟request.getSession().getAttribute(PROJECT\u WISE\u SESSION)。因此,我尝试了when(request.getSession())。然后返回(session)但是使用request.getSession()我得到了null试试类似的方法 private BankApp processSelection(HttpServletRequest request,

我们如何为这个方法编写junit测试用例?我在这里面临的挑战是我们需要模拟
request.getSession().getAttribute(PROJECT\u WISE\u SESSION)
。因此,我尝试了
when(request.getSession())。然后返回(session)
但是使用
request.getSession()
我得到了
null

试试类似的方法

private BankApp processSelection(HttpServletRequest request,
        String[] facets, String selectedText) {
    DebugUtility.debug(LOG, "Enter into JiraController :: processDashBoardPortFolioSelection()");
    BankApp project = new BankApp();
    List<BankApp> dataAgg = (List<BankApp>) request.getSession()
            .getAttribute(PROJECT_WISE_SESSION);
    if (CollectionUtils.isNotEmpty(dataAgg)) {
        List<BankApp> projects = new ArrayList<>();
        for (String currentProjectId : facets) {
            Project currProject = vendorUtils.getProjectDetails(currentProjectId);
            List<SourceProjectAssocation> sourceSystem = currProject.getSourceSytems("JIRA");
            List<String> jiraProjects = new ArrayList<>();
            sourceSystem.stream().forEach(s -> jiraProjects.add(s.getAssociatedJiraProject()));
            for (BankApp projectData : dataAgg) {
                if (jiraProjects.contains(projectData.getProjectKey())) {
                    projects.add(projectData);
                }
            }
        }
        project = processAllProjectsData(projects);
        project.setProjectKey(selectedText);
        project.setProjectsCount(projects.size());
    }
    DebugUtility.debug(LOG, "project in processDashBoardPortFolioSelection :: " + project);
    DebugUtility.debug(LOG, "Exit from JiraController :: processDashBoardPortFolioSelection()");
    return project;
}
@测试
公开无效测试(){

HttpServletRequestMock=Mockito.mock(HttpServletRequest.class); HttpSession sessionMock=Mockito.mock(HttpServletRequest.class); Mockito.when(requestMock.getSession()).thenReturn(sessionMock); processSelection(requestMock,) //在这里做一些断言/验证 }
试试这样的方法

private BankApp processSelection(HttpServletRequest request,
        String[] facets, String selectedText) {
    DebugUtility.debug(LOG, "Enter into JiraController :: processDashBoardPortFolioSelection()");
    BankApp project = new BankApp();
    List<BankApp> dataAgg = (List<BankApp>) request.getSession()
            .getAttribute(PROJECT_WISE_SESSION);
    if (CollectionUtils.isNotEmpty(dataAgg)) {
        List<BankApp> projects = new ArrayList<>();
        for (String currentProjectId : facets) {
            Project currProject = vendorUtils.getProjectDetails(currentProjectId);
            List<SourceProjectAssocation> sourceSystem = currProject.getSourceSytems("JIRA");
            List<String> jiraProjects = new ArrayList<>();
            sourceSystem.stream().forEach(s -> jiraProjects.add(s.getAssociatedJiraProject()));
            for (BankApp projectData : dataAgg) {
                if (jiraProjects.contains(projectData.getProjectKey())) {
                    projects.add(projectData);
                }
            }
        }
        project = processAllProjectsData(projects);
        project.setProjectKey(selectedText);
        project.setProjectsCount(projects.size());
    }
    DebugUtility.debug(LOG, "project in processDashBoardPortFolioSelection :: " + project);
    DebugUtility.debug(LOG, "Exit from JiraController :: processDashBoardPortFolioSelection()");
    return project;
}
@测试
公开无效测试(){

HttpServletRequestMock=Mockito.mock(HttpServletRequest.class); HttpSession sessionMock=Mockito.mock(HttpServletRequest.class); Mockito.when(requestMock.getSession()).thenReturn(sessionMock); processSelection(requestMock,) //在这里做一些断言/验证 }
pls,提供格式化代码pls,提供格式化代码谢谢瓦伦廷·安祖罗夫的回复。我正在尝试您的解决方案HttpServletRequestMock=Mockito.mock(HttpServletRequest.class);HttpServletRequest sessionMock=Mockito.mock(HttpServletRequest.class);Mockito.when(requestMock.getSession()).thenReturn((HttpSession)sessionMock)//它是好的还是坏的not@KrishGaur不可以。您不能将sessionMock(引擎盖下的HttpServletRequest)强制转换为HttpSession。用我的code@KrishGaur那又怎样?@Test public void testfacets()抛出IOException{when(service.getData(Mockito.any()、Mockito.any()、Mockito.any()、Mockito.any())。然后返回(getJiraEntity());HttpEntity requestEntity=new HttpEntity(constructureqheaders());responseenty responseenty=restemplate.withbasicuth(env.getProperty(“用户名”)、env.getProperty(“密码”)).exchange(“/api/jira?facets=allProjects&mode=all&selectedtext=allProjects”,HttpMethod.GET,requestEntity,Object.class);Assert.assertEquals(HttpStatus.OK,responseEntity.getStatusCode());)感谢Valentin Anzhurov的回复。我正在尝试您的解决方案HttpServletRequestMock=Mockito.mock(HttpServletRequest.class);HttpServletRequest sessionMock=Mockito.mock(HttpServletRequest.class);Mockito.when(requestMock.getSession())。然后返回((HttpSession)sessionMock)//not@KrishGaur不可以。您不能将sessionMock(引擎盖下的HttpServletRequest)强制转换为HttpSession。只需使用我的code@KrishGaur那又怎样?@Test public void testfacets()抛出IOException{when(service.getData(Mockito.any(),Mockito.any(),Mockito.any()),然后返回(getJiraEntity());HttpEntity requestEntity=new HttpEntity(constructReqHeaders());ResponseEntity ResponseEntity=restTemplate.withBasicAuth(env.getProperty(“用户名”)、env.getProperty(“密码”).exchange(“/api/jira?facets=allProjects&mode=all&selectedtext=allProjects”、HttpMethod.GET、requestEntity、Object.class);Assert.assertEquals(HttpStatus.OK,responseEntity.getStatusCode());}