【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月前
|
监控 测试技术 定位技术
HTTP代理IP响应速度测试方案设计与指标体系
随着数字化发展,网络安全、隐私保护及内容访问自由成为核心需求。HTTP代理因其技术优势成为热门选择。本文介绍HTTP代理IP响应速度测试方案,包括基础性能、稳定性、地理位置、实际应用、安全性测试及监控指标,推荐测试工具,并提供测试结果评估标准。
42 2
|
2月前
|
消息中间件 测试技术
通过轻量消息队列(原MNS)主题HTTP订阅+ARMS实现自定义数据多渠道告警
轻量消息队列(原MNS)以其简单队列模型、轻量化协议及按量后付费模式,成为阿里云产品间消息传输首选。本文通过创建主题、订阅、配置告警集成等步骤,展示了该产品在实际应用中的部分功能,确保消息的可靠传输。
55 2
|
2月前
|
前端开发 JavaScript Java
如何捕获和处理HTTP GET请求的异常
如何捕获和处理HTTP GET请求的异常
|
2月前
|
Dubbo Java 应用服务中间件
深入探讨了“dubbo+nacos+springboot3的native打包成功后运行出现异常”的原因及解决方案
本文深入探讨了“dubbo+nacos+springboot3的native打包成功后运行出现异常”的原因及解决方案。通过检查GraalVM版本兼容性、配置反射列表、使用代理类、检查配置文件、禁用不支持的功能、查看日志文件、使用GraalVM诊断工具和调整GraalVM配置等步骤,帮助开发者快速定位并解决问题,确保服务的正常运行。
64 1
|
3月前
|
Java API Spring
springBoot:注解&封装类&异常类&登录实现类 (八)
本文介绍了Spring Boot项目中的一些关键代码片段,包括使用`@PathVariable`绑定路径参数、创建封装类Result和异常处理类GlobalException、定义常量接口Constants、自定义异常ServiceException以及实现用户登录功能。通过这些代码,展示了如何构建RESTful API,处理请求参数,统一返回结果格式,以及全局异常处理等核心功能。
|
3月前
|
Java 关系型数据库 数据库连接
SpringBoot项目使用yml文件链接数据库异常
【10月更文挑战第3天】Spring Boot项目中数据库连接问题可能源于配置错误或依赖缺失。YAML配置文件的格式不正确,如缩进错误,会导致解析失败;而数据库驱动不匹配、连接字符串或认证信息错误同样引发连接异常。解决方法包括检查并修正YAML格式,确认配置属性无误,以及添加正确的数据库驱动依赖。利用日志记录和异常信息分析可辅助问题排查。
420 10
|
4月前
|
JSON 移动开发 监控
快速上手|HTTP 接口功能自动化测试
HTTP接口功能测试对于确保Web应用和H5应用的数据正确性至关重要。这类测试主要针对后台HTTP接口,通过构造不同参数输入值并获取JSON格式的输出结果来进行验证。HTTP协议基于TCP连接,包括请求与响应模式。请求由请求行、消息报头和请求正文组成,响应则包含状态行、消息报头及响应正文。常用的请求方法有GET、POST等,而响应状态码如2xx代表成功。测试过程使用Python语言和pycurl模块调用接口,并通过断言机制比对实际与预期结果,确保功能正确性。
299 3
快速上手|HTTP 接口功能自动化测试
|
3月前
|
Java 关系型数据库 MySQL
SpringBoot项目使用yml文件链接数据库异常
【10月更文挑战第4天】本文分析了Spring Boot应用在连接数据库时可能遇到的问题及其解决方案。主要从四个方面探讨:配置文件格式错误、依赖缺失或版本不兼容、数据库服务问题、配置属性未正确注入。针对这些问题,提供了详细的检查方法和调试技巧,如检查YAML格式、验证依赖版本、确认数据库服务状态及用户权限,并通过日志和断点调试定位问题。
281 6
|
4月前
|
存储 JSON Go
在Gin框架中优雅地处理HTTP请求体中的JSON数据
在Gin框架中优雅地处理HTTP请求体中的JSON数据
|
4月前
|
JSON JavaScript 前端开发
Haskell中的数据交换:通过http-conduit发送JSON请求
Haskell中的数据交换:通过http-conduit发送JSON请求

热门文章

最新文章