栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Junit

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Junit

一般的方法执行
@Test
@SpringBootTest
class SpringbootRedisApplicationTests {

    @Test
    void contextLoads() {
    //测试自己需要的方法
    }

}

JUnit_MockMvc,主要测试controller

使用这个进行测试,是为了方便自己不用启动整个项目,还有更快的了解自己的需要,不用一遍又一遍的去启动项目,极大的减少了自己的工作量。意思就是,用什么就启动什么。我这么理解,要是有更好的可以评论

src 下的controller

@Controller
@RequestMapping("/")
public class IndexController {
    @GetMapping("/index")
    public String index(Model model){
        List list = new ArrayList();
        list.add("hello,world0");
        list.add("hello,teacher");
        list.forEach(System.out::print);
        System.out.println("======>");
        list.forEach((e)-> System.out.println(e));
        model.addAttribute("list",list);
        return "index";
    }


    @PostMapping("/post")
    @ResponseBody
    public String hello(String name){
        return "hello "+name;
    }
}


test下的mockmvc测试

@RunWith(SpringRunner.class)
@SpringBootTest
@WebAppConfiguration
public class IndexControllerTest {
    private MockMvc mockMvc;

    @Autowired
    private WebApplicationContext webApplicationContext;

    @Before
    public void setup() {
        // 实例化方式一
        mockMvc = MockMvcBuilders.standaloneSetup(new IndexController()).build();
        // 实例化方式二
//		mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
    }

    @Test
    public void testHello() throws Exception {

        
        mockMvc.perform(MockMvcRequestBuilders
                        .post("/post")
                        // 设置返回值类型为utf-8,否则默认为ISO-8859-1
                        .accept(MediaType.APPLICATION_JSON_VALUE)
                        .param("name","lvgang"))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andExpect(MockMvcResultMatchers.content().string("hello lvgang"))
                .andDo(MockMvcResultHandlers.print());


    }


}

执行后结果显示

MockHttpServletRequest:
      HTTP Method = POST
      Request URI = /post
       Parameters = {name=[lvgang]}
          Headers = [Accept:"application/json"]
             Body = 
    Session Attrs = {}

Handler:
             Type = com.hechao.controller.IndexController
           Method = com.hechao.controller.IndexController#hello(String)

Async:
    Async started = false
     Async result = null

Resolved Exception:
             Type = null

ModelAndView:
        View name = null
             View = null
            Model = null

FlashMap:
       Attributes = null

MockHttpServletResponse:
           Status = 200
    Error message = null
          Headers = [Content-Type:"application/json", Content-Length:"12"]
     Content type = application/json
             Body = hello lvgang
    Forwarded URL = null
   Redirected URL = null
          cookies = []

Process finished with exit code 0

以下是涉及到的一些源码

MockMvcRequestBuilders ,是根据resuleful风格进行的

请求的返回值是MockHttpServletRequestBuilder类型
设置数据类型,有json,xml等等,可以看源码,根据需求选择

    public MockHttpServletRequestBuilder accept(MediaType... mediaTypes) {
        Assert.notEmpty(mediaTypes, "'mediaTypes' must not be empty");
        this.headers.set("Accept", MediaType.toString(Arrays.asList(mediaTypes)));
        return this;
    }

还有请求的参数,通过这设置,单个的,多个的(可以用k-v进行处理)
内部使用的Iterator外部迭代

    public MockHttpServletRequestBuilder param(String name, String... values) {
        addToMultiValueMap(this.parameters, name, values);
        return this;
    }

    public MockHttpServletRequestBuilder params(MultiValueMap params) {
        params.forEach((name, values) -> {
            Iterator var3 = values.iterator();

            while(var3.hasNext()) {
                String value = (String)var3.next();
                this.parameters.add(name, value);
            }

        });
        return this;
    }

基本的controller层请求,正常逻辑就结束了,就剩下返回值的校验了
通过MockMvcResultMatchers类下的方法根据需求进行对比。
成功的结果在上面

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/631269.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号