打开当前工程下的pom.xml 文件,看看生成项目的时候都引入那些依赖创建SpringBoot工程,内容如下:
4.0.0
com.peter
spring_test
0.0.1-SNAPSHOT
jar
spring_test
Demo project for Spring Boot
org.springframework.boot
spring-boot-starter-parent
2.0.1.RELEASE
UTF-8
UTF-8
1.8
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-actuator
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-starter-security
com.alibaba
druid
1.0.29
org.springframework.boot
spring-boot-maven-plugin
dev
profiles/dev
pro
profiles/pro
test
profiles/test
我们注意到Spring Boot打的是jar包:
父项目parent 配置指定为spring-boot-starter-parent 的2.0.1.RELEASE的版本,该父项目中定义了Spring Boot 版本的基础依赖以及一些默认配置内容,比如配置文件application.properties 的位置等。
在项目依赖dependencies 配置中,包含了下面两项。
Spring-boot-starter-web ; spring-boot-starter-test
这里所引用的web 和test模块,在spring Boot 生态中被称为Starter POMS 。Starter POMS是一系列轻便的依赖包,是一套一站式的spring的相关的技术解决方案。
在Spring Boot 中创建一个RESTful API 的实现代码同Spring MVC 应用一样,只是不需要像Spring MVC 那样先做很多的配置,而是向下面这样直接编写Controller 内容:
新建 package ,命名为 com.peter.controller
新建HelloController 类 ,内容如下所示。
package com.peter.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
/**
* Created by Administrator on 2018/4/9.
*/
@RestController
@ResponseBody
public class HelloController {
@RequestMapping("/hello")
public String hello(){
return "hello world";
}
}
通过 http://localhost:8080/hello 就可以看到hello word
在Spring Boot 中实现单元测试同样非常的方便,下面我们打开src/test/下的测试入口 com.peter.SpringTestApplicationTests 类 ,编写一个简单的单元测试来模拟HTTP 请求,测试之前实现的/hello接口, 该接口返回hello word 字符串。
具体代码实现如下所示:
package com.peter;
import com.peter.controller.HelloController;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import static org.hamcrest.core.IsEqual.equalTo;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@RunWith(SpringRunner.class)
@SpringBootTest
@WebAppConfiguration
public class SpringTestApplicationTests {
private MockMvc mvc;
@Before
public void setUP(){
mvc = MockMvcBuilders.standaloneSetup(new HelloController()).build();
}
@Test
public void hello() throws Exception {
mvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(content().string(equalTo("hello world")));
}
}
代码解析如下:
@RunWith(SpringRunner.class) 引入Spring 对JUnit4的支持
@WebAppConfiguration 开启Web 应用的配置,用于模拟ServletContext
@Before JUnit 中定义的测试用例@Test内容执行前预加载的内容,这里用来初始化对HelloController的模拟
MockMvc 对象 :用于模拟调用Controller的接口发起请求,在@Test 定义的hello测试用例中,perform 函数执行一次请求调用 ,accept 用于执行接收的数据类型,andExpect用于判断接口的期望值。