zoukankan      html  css  js  c++  java
  • 使用MockMvc进行springboot调试(SpringbootTest)

    测试前关闭web项目。springboot启动程序WebApplication.class

    笔者本地自定了端口SpringBootTest.WebEnvironment.DEFINED_PORT

    代码如下:

    import com.xxx.web.WebApplication;
    import org.junit.Before;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.http.MediaType;
    import org.springframework.mock.web.MockHttpSession;
    import org.springframework.test.context.junit4.SpringRunner;
    import org.springframework.test.web.servlet.MockMvc;
    import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
    import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
    import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
    import org.springframework.test.web.servlet.setup.MockMvcBuilders;
    import org.springframework.web.context.WebApplicationContext;
    
    import java.time.Instant;
    import java.util.Random;
    
    import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
    import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
    import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
    
    @RunWith(SpringRunner.class)
    @SpringBootTest(classes = WebApplication.class, webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
    @AutoConfigureMockMvc
    public class TestAppController {
    
        @Autowired
        private WebApplicationContext context;
    
        @Autowired
        private MockMvc mvc;
    
        private MockHttpSession session;// 1.定义一个变量保存session
    
        String pathOnClasspath;
    
    
    
        @Before
        public void setUp() throws Exception {
            mvc = MockMvcBuilders.webAppContextSetup(context).build();
            session = new MockHttpSession(); //2.初始化
        }
    
        @Test
        public void login() throws Exception {
            // 登陆
            MockHttpServletRequestBuilder loginRequestBuilder = MockMvcRequestBuilders.post("/user2/login")
                    .param("loginName", "test")
                    .param("password", "567")
                    .contentType(MediaType.APPLICATION_JSON_UTF8)
                    .accept(MediaType.APPLICATION_JSON)
                    .session(session);//3.当某个请求需要session时,直接在构造器中绑定需要的session
            mvc.perform(loginRequestBuilder).andDo(MockMvcResultHandlers.print());
    
        }
    
        @Test
        public void save() throws Exception {
    
            //先登录
            login();
    
            mvc.perform(post("/app/save")
                    .param("name","测试")
                    .param("categoryId","567")
                    .param("description","休闲益智类游戏语音识别测试")
                    .session(session)
                    .contentType(MediaType.APPLICATION_JSON))
                    .andExpect(status().isOk())
                    //.andExpect(jsonPath("$",hasSize(1)))
                    //.andExpect(jsonPath("$.message").value(is("保存成功")))
                    //.andExpect(jsonPath("$.message"),is("保存成功"))
                    .andDo(MockMvcResultHandlers.print());
        }
    
    
        @Test
        public void update() throws Exception{
            Random rnd = new Random();
            int id = rnd.nextInt(6);
            mvc.perform(
                    post("/app/update")
                            .param("id", String.valueOf(id))
                            .param("name", String.format("测试%s", Instant.now().toEpochMilli()))
                            .param("description", "描述12121")
            ).andDo(MockMvcResultHandlers.print());
        }
    
        @Test
        public void list() throws Exception {
            mvc.perform(get("/app/list")
                    .contentType(MediaType.TEXT_HTML))
                    .andExpect(status().isOk())
                    .andDo(MockMvcResultHandlers.print());
        }
    
        @Test
        public void filteredList() throws Exception {
            mvc.perform(post("/app/list")
                    .param("keyword","111")
                    .contentType(MediaType.TEXT_HTML))
                    .andExpect(status().isOk())
                    .andDo(MockMvcResultHandlers.print());
        }
    
        @Test
        public void testisDuplicatedName() throws Exception
        {
            mvc.perform(post("/app/isDuplicatedName")
                    .param("name","测试")
            ).andDo(MockMvcResultHandlers.print());
        }
    
    
    }

    测试输出效果

    其他参考:

    https://www.petrikainulainen.net/programming/spring-framework/integration-testing-of-spring-mvc-applications-write-clean-assertions-with-jsonpath/

  • 相关阅读:
    DS博客作业02--栈和队列
    DS博客作业03--树
    C博客作业05--指针
    C语言博客作业04--数组
    C博客作业03--函数
    C博客作业02--循环结构
    C博客作业01--分支、顺序结构
    我的第一篇博客作业
    java购物车案例
    第三周-自主学习任务-面向对象基础与类的识别
  • 原文地址:https://www.cnblogs.com/passedbylove/p/11675333.html
Copyright © 2011-2022 走看看