• spring boot单元测试之七:用mockmvc模拟session(spring boot 2.4.3)


    一,演示项目的相关信息

    1,地址:

    https://github.com/liuhongdi/sessiontest

    2,功能说明:

               演示了用mockmvc模拟有session时的操作

    3,项目结构:如图:

    说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest

             对应的源码可以访问这里获取: https://github.com/liuhongdi/

    说明:作者:刘宏缔 邮箱: 371125307@qq.com

    二,java代码说明

    1,controller/UserController.java

    @RestController
    @RequestMapping("/user")
    public class UserController {
    
        //读取session
        @GetMapping("/get")
        public String getsess(HttpServletRequest request) {
            HttpSession session=request.getSession();
            String username = (String)session.getAttribute("username");
            System.out.println("session username:"+username);
    
            if (username == null) {
                return "";
            } else {
                return username;
            }
        }
    
        //设置session
        @GetMapping("/set")
        public String setSess(@RequestParam("userName")String userName, HttpServletRequest request) {
            HttpSession session=request.getSession();
            session.setAttribute("username", userName);
            //判断写入是否成功?
            String nameret = (String)session.getAttribute("username");
            System.out.println("set session username and read:"+nameret);
            return nameret;
        }
    }

    2,controller/UserControllerTest.java

    @AutoConfigureMockMvc
    @SpringBootTest
    class UserControllerTest {
    
        @Autowired
        private UserController userController;
    
        @Autowired
        private MockMvc mockMvc;
    
        private static MockHttpSession sessionPub;
        /**
         * 测试方法开始之前执行   设置模拟Mvc
         */
        @BeforeAll
        public static void setupMockMvc() {
            sessionPub = new MockHttpSession();
            sessionPub.setAttribute("username", "liuhongdi");
        }
        @Test
        @DisplayName("测试get用户名,有session")
        void getTest() throws Exception {
            //MockHttpSession session = new MockHttpSession();
            //session.setAttribute("username", "liuhongdi");
            MvcResult mvcResult = mockMvc.perform(get("/user/get")
                    .session(sessionPub)
                    .contentType(MediaType.APPLICATION_FORM_URLENCODED))
                    .andReturn();
            String content = mvcResult.getResponse().getContentAsString();
            assertThat(content, equalTo("liuhongdi"));
        }
    
        @Test
        @DisplayName("测试get用户名,无session")
        void getTestFail() throws Exception {
            MvcResult mvcResult = mockMvc.perform(get("/user/get")
                    .contentType(MediaType.APPLICATION_FORM_URLENCODED))
                    .andReturn();
            String content = mvcResult.getResponse().getContentAsString();
            assertThat(content, equalTo(""));
        }
    
        @Test
        @DisplayName("测试set session")
        void setTest() throws Exception {
            String name="mr liu";
            MvcResult mvcResult = mockMvc.perform(get("/user/set?userName="+name)
                    .session(sessionPub)
                    .contentType(MediaType.APPLICATION_FORM_URLENCODED))
                    .andReturn();
            String content = mvcResult.getResponse().getContentAsString();
            assertThat(content, equalTo("mr liu"));
        }
    }

    三,测试效果

    1,访问url查看效果:

    设置session

    http://127.0.0.1:8080/user/set?userName=laoliuabc

    如图:

    读取session:

    访问:

    http://127.0.0.1:8080/user/get

    如图:

    2,运行单元测试:

    四,查看spring boot的版本:

      .   ____          _            __ _ _
     /\ / ___'_ __ _ _(_)_ __  __ _    
    ( ( )\___ | '_ | '_| | '_ / _` |    
     \/  ___)| |_)| | | | | || (_| |  ) ) ) )
      '  |____| .__|_| |_|_| |_\__, | / / / /
     =========|_|==============|___/=/_/_/_/
     :: Spring Boot ::                (v2.4.3)
  • 相关阅读:
    python imageai 对象检测、对象识别
    flask跨域请求三行代码搞定
    图片压缩-KMeans
    电影天堂
    python 时间操作
    时间HTML
    3D滚动效果
    tensorflow基础
    studio显示Surface: getSlotFromBufferLocked: unknown buffer: 0xa2a58be0
    解决github访问慢和clone慢解决方案
  • 原文地址:https://www.cnblogs.com/architectforest/p/14583410.html
Copyright © 2020-2023  润新知