【SpringBoot】Http请求统一异常(返回数据)处理与单元测试(2)

简介: 【SpringBoot】Http请求统一异常(返回数据)处理与单元测试

单元测试

测试对任何项目来说是必不可少的

测试Service中的findOne方法

第一种方式,可以自己去test目录下写测试类

package cn.chenhaoxiang;
import cn.chenhaoxiang.entity.People;
import cn.chenhaoxiang.service.PeopleService;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
/**
 * Created with IntelliJ IDEA.
 * User: 陈浩翔.
 * Date: 2018/1/7.
 * Time: 下午 3:52.
 * Explain:
 */
@RunWith(SpringRunner.class)//表示在测试环境中跑
@SpringBootTest//表示将启动整个spring 的工程
public class PeopleServiceTest {
    @Autowired
    private PeopleService peopleService;
    @Test
    public void findOneTest(){
        People people = peopleService.findOne(7);
        //使用断言
        Assert.assertEquals(new Integer(20),people.getAge());
    }
}


第二种方式,如果你是使用的IDEA这个工具,可以直接这样

PeopleService接口的findOne方法上右键,出现如下的

选择go to,然后点击test



因为我已经用方式一创建了一个测试方法,没事,可以再创建一个演示一下



选择需要测试的方法

也就是勾上你需要测试的方法


点击ok,会给你在test目录下创建如下的类


package cn.chenhaoxiang.service;
import org.junit.Test;
import static org.junit.Assert.*;
/**
 * Created with IntelliJ IDEA.
 * User: 陈浩翔.
 * Date: 2018/1/7.
 * Time: 下午 4:04.
 * Explain:
 */
public class PeopleServiceTest {
    @Test
    public void findOne() throws Exception {
    }
}



然后你进行添加类注解


@RunWith(SpringRunner.class)//表示在测试环境中跑
@SpringBootTest//表示将启动整个spring 的工程

和注入接口


@Autowired
    private PeopleService peopleService;


其他的就类似方式一了,只是相对于方式一,少写了一点代码,对应的包,类,方法名都给你建好了。


对Controller测试


我们对controller的获取所有人的方法进行测试,也就是测试


/**
     * 获取所有的人的数据
     * @return
     */
    @GetMapping(value = "/peoples")
    public List<People> getPeople(){
        logger.info("getPeople");
        return peopleDao.findAll();//一句SQL都没写,很方便
    }


我们在IDEA中使用方式二,右键go to的方式进行


首先我们相对与之前的service测试需要多加一个@AutoConfigureMockMvc注解


package cn.chenhaoxiang.controller;
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.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import static org.junit.Assert.*;
/**
 * Created with IntelliJ IDEA.
 * User: 陈浩翔.
 * Date: 2018/1/7.
 * Time: 下午 4:09.
 * Explain:
 */
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc //Controller测试的,需要是用这个注解
public class IndexControllerTest {
//    @Autowired
//    private IndexController indexController;
//    @Test
//    public void getPeople1() throws Exception {
//        indexController.getPeople();//这样只是对方法进行了测试
//        //我们想用url进行测试,而且可以进行post或者get方法
//    }
    @Autowired
    private MockMvc mvc;
    @Test
    public void getPeople() throws Exception {
        mvc.perform(MockMvcRequestBuilders.get("/peoples"))//如果是post,就是调用post方法
                .andExpect(MockMvcResultMatchers.status().isOk());//对返回的状态码进行判断
//        .andExpect(MockMvcResultMatchers.content().string("a"))//对返回值进行判断,这里是200
    }
    //当进行打包的时候,会运行所有的单元测试方法,如果有失败,就会出现打包失败
    //如果打包的时候希望跳过单元测试,则打包命令为
    // mvn clean package -Damven.test.skip=true
}

可以在测试输出中看到结果的


然后测试一下post请求,并带参数的

    /**
     * post测试,并带参数
     * @throws Exception
     */
    @Test
    public void peopleEdit() throws Exception {
        //发送请求
        ResultActions resultActions = mvc.perform(MockMvcRequestBuilders.post("/edit").param("id","6")
                .param("name","测试Controller")
                .param("score","20.00")
                .param("age","29"))//如果是post,就是调用post方法
                .andExpect(MockMvcResultMatchers.status().isOk());//对返回的状态码进行判断
        MvcResult mvcResult = resultActions.andReturn();
        String result = mvcResult.getResponse().getContentAsString();
        System.out.println("客户端获得反馈数据:" + result);
    }

传递的是People参数,在这里我们传参不要直接传People对象或者该对象的json,应该对每个属性都用param赋值传

完整的Controller测试类

package cn.chenhaoxiang.controller;
import cn.chenhaoxiang.entity.People;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectWriter;
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.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.ResultActions;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import static org.junit.Assert.*;
/**
 * Created with IntelliJ IDEA.
 * User: 陈浩翔.
 * Date: 2018/1/7.
 * Time: 下午 4:09.
 * Explain:
 */
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc //Controller测试的,需要是用这个注解
public class IndexControllerTest {
//    @Autowired
//    private IndexController indexController;
//    @Test
//    public void getPeople1() throws Exception {
//        indexController.getPeople();//这样只是对方法进行了测试
//        //我们想用url进行测试,而且可以进行post或者get方法
//    }
    @Autowired
    private MockMvc mvc;
    @Test
    public void getPeople() throws Exception {
        ResultActions resultActions = mvc.perform(MockMvcRequestBuilders.get("/peoples"))//如果是post,就是调用post方法
                .andExpect(MockMvcResultMatchers.status().isOk());//对返回的状态码进行判断,这个isOK是200
//        .andExpect(MockMvcResultMatchers.content().string("a"))//对返回值进行判断
        MvcResult mvcResult = resultActions.andReturn();
        String result = mvcResult.getResponse().getContentAsString();
        System.out.println("客户端获得反馈数据:" + result);
    }
    //当进行打包的时候,会运行所有的单元测试方法,如果有失败,就会出现打包失败
    //如果打包的时候希望跳过单元测试,则打包命令为
    // mvn clean package -Damven.test.skip=true
    /**
     * post测试,并带参数
     * @throws Exception
     */
    @Test
    public void peopleEdit() throws Exception {
        //发送请求
        ResultActions resultActions = mvc.perform(MockMvcRequestBuilders.post("/edit").param("id","6")
                .param("name","测试Controller")
                .param("score","20.00")
                .param("age","29"))//如果是post,就是调用post方法
                .andExpect(MockMvcResultMatchers.status().isOk());//对返回的状态码进行判断
        MvcResult mvcResult = resultActions.andReturn();
        String result = mvcResult.getResponse().getContentAsString();
        System.out.println("客户端获得反馈数据:" + result);
    }
}

源代码下载地址:

GITHUB源码下载地址: 点我进行下载
目录
相关文章
|
1月前
|
数据采集
Haskell爬虫:连接管理与HTTP请求性能
Haskell爬虫:连接管理与HTTP请求性能
|
7天前
|
JavaScript Java 关系型数据库
毕设项目&课程设计&毕设项目:基于springboot+vue实现的在线考试系统(含教程&源码&数据库数据)
本文介绍了一个基于Spring Boot和Vue.js实现的在线考试系统。随着在线教育的发展,在线考试系统的重要性日益凸显。该系统不仅能提高教学效率,减轻教师负担,还为学生提供了灵活便捷的考试方式。技术栈包括Spring Boot、Vue.js、Element-UI等,支持多种角色登录,具备考试管理、题库管理、成绩查询等功能。系统采用前后端分离架构,具备高性能和扩展性,未来可进一步优化并引入AI技术提升智能化水平。
毕设项目&课程设计&毕设项目:基于springboot+vue实现的在线考试系统(含教程&源码&数据库数据)
|
9天前
|
Java 关系型数据库 MySQL
毕设项目&课程设计&毕设项目:springboot+jsp实现的房屋租租赁系统(含教程&源码&数据库数据)
本文介绍了一款基于Spring Boot和JSP技术的房屋租赁系统,旨在通过自动化和信息化手段提升房屋管理效率,优化租户体验。系统采用JDK 1.8、Maven 3.6、MySQL 8.0、JSP、Layui和Spring Boot 2.0等技术栈,实现了高效的房源管理和便捷的租户服务。通过该系统,房东可以轻松管理房源,租户可以快速找到合适的住所,双方都能享受数字化带来的便利。未来,系统将持续优化升级,提供更多完善的服务。
毕设项目&课程设计&毕设项目:springboot+jsp实现的房屋租租赁系统(含教程&源码&数据库数据)
|
14天前
|
监控 网络协议 应用服务中间件
【Tomcat源码分析】从零开始理解 HTTP 请求处理 (第一篇)
本文详细解析了Tomcat架构中复杂的`Connector`组件。作为客户端与服务器间沟通的桥梁,`Connector`负责接收请求、封装为`Request`和`Response`对象,并传递给`Container`处理。文章通过四个关键问题逐步剖析了`Connector`的工作原理,并深入探讨了其构造方法、`init()`与`start()`方法。通过分析`ProtocolHandler`、`Endpoint`等核心组件,揭示了`Connector`初始化及启动的全过程。本文适合希望深入了解Tomcat内部机制的读者。欢迎关注并点赞,持续更新中。如有问题,可搜索【码上遇见你】交流。
【Tomcat源码分析】从零开始理解 HTTP 请求处理 (第一篇)
|
23小时前
|
Java 关系型数据库 数据库连接
SpringBoot项目使用yml文件链接数据库异常
【10月更文挑战第3天】Spring Boot项目中数据库连接问题可能源于配置错误或依赖缺失。YAML配置文件的格式不正确,如缩进错误,会导致解析失败;而数据库驱动不匹配、连接字符串或认证信息错误同样引发连接异常。解决方法包括检查并修正YAML格式,确认配置属性无误,以及添加正确的数据库驱动依赖。利用日志记录和异常信息分析可辅助问题排查。
22 10
|
3天前
|
JSON Java 数据格式
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
8 1
|
7天前
|
XML JSON Java
springboot文件上传,单文件上传和多文件上传,以及数据遍历和回显
本文介绍了在Spring Boot中如何实现文件上传,包括单文件和多文件上传的实现,文件上传的表单页面创建,接收上传文件的Controller层代码编写,以及上传成功后如何在页面上遍历并显示上传的文件。同时,还涉及了`MultipartFile`类的使用和`@RequestPart`注解,以及在`application.properties`中配置文件上传的相关参数。
springboot文件上传,单文件上传和多文件上传,以及数据遍历和回显
|
23天前
|
JSON JavaScript 前端开发
Haskell中的数据交换:通过http-conduit发送JSON请求
Haskell中的数据交换:通过http-conduit发送JSON请求
|
25天前
|
JSON API 开发者
Python网络编程新纪元:urllib与requests库,让你的HTTP请求无所不能
【9月更文挑战第9天】随着互联网的发展,网络编程成为现代软件开发的关键部分。Python凭借简洁、易读及强大的特性,在该领域展现出独特魅力。本文介绍了Python标准库中的`urllib`和第三方库`requests`在处理HTTP请求方面的优势。`urllib`虽API底层但功能全面,适用于深入控制HTTP请求;而`requests`则以简洁的API和人性化设计著称,使HTTP请求变得简单高效。两者互补共存,共同推动Python网络编程进入全新纪元,无论初学者还是资深开发者都能从中受益。
36 7
|
23天前
|
开发者
HTTP状态码是由网页服务器返回的三位数字响应代码,用于表示请求的处理结果和状态
HTTP状态码是由网页服务器返回的三位数字响应代码,用于表示请求的处理结果和状态
24 1
下一篇
无影云桌面