SpringBoot入门(二)

作为一个优秀的Java程序员,在开发web应用中,对自己写过的代码进行单元测试是必不可少。

在IT行业中,测试有单元测试,集成测试,回归测试和自动化测试等。本文主要以上一篇的SpringBoot入门(一)的代码为基础,讲述如何在SpringBoot应用下进行单元测试。

在开始之前,我们必须了解一下单元测试的概念。单元测试是干什么的?编写测试代码,用来检测特定的、明确、细颗粒的功能。不仅仅用来保证当前代码的正确性,而且用来保证代码修复、改进或重构之后的正确性。

在这里要注意一点,单元测试是仅针对单独一个类的方法进行测试,如果被测试类的方法体依赖于其他类的方法,那么我们要为依赖类建立相应的mock对象,方可对被测试类进行单元测试。否则,在被测试类依赖其他类的情况下进行测试,俨然成了集成测试。

开发环境:

  • ubuntu16.04
  • idea2017
  • JDK1.8
  • SpringBoot 1.5.4

第一步,先查看一下项目的pom.xm文件,看看之前为了实现一个简单的RESTful API都引进了哪些模块。对RESTful API的概念不理解的同学,可去看一下《RESTful API 设计指南》,里面很清晰地讲述什么是RESTful API,而我们如何设计标准化的RESTful API。

这里写图片描述

可以看到,当前项目引用了两个模块。

  • spring-boot-starter-web:web模块,保护自动化配置支持,内置tomcat以及jackson。
  • spring-boot-starter-test:测试模块,包括Junit、Hamcrest、Mockito测试框架

既然已经引用了spring-boot-start-test,那么我们可以在src/test/java下建立对应前文建立的HelloWorldController.class的测试类。

第二步,创建HelloWorldControllerTest.class测试类。

这里写图片描述

第三步,编写测试代码。

package com.rocky.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.RequestBuilder;

import static org.hamcrest.Matchers.equalTo;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

/**
 * Created by rocky on 17-7-28.
 */
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class HelloWorldControllerTest {

    @Autowired
    private MockMvc mvc;  /* mvc的mock对象 */

    @Test
    public void testHello() {
        RequestBuilder request = get("/hello/");  /* 定义URL,已经发起请求为get方式 */

        /* 模拟发起Http请求 */
        try {
            mvc.perform(request)
                    .andExpect(status().isOk()) /* 比较返回码是否为200 */
                    .andExpect(content().string(equalTo("{" +  /* 比较返回内容 */
                            "\"msg\":\"HelloWorld\"," +
                            "\"status\":\"success\"" +
                            "}")));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

运行该测试,查看结果。

这里写图片描述

可以看到,测试通过。

在这里要和各位提及一下,Springboot1.4x以上版本与Springboot1.4x以下版本的单元测试有明显的区别。上述的单元测试用例不适用于Springboot1.4x以下。

完整的项目代码可在我的GitHub主页下载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值