-- SpringBoot-从零开始快速入门(创建一个api,并增加单元测试)
【官网】:https://spring.io/projects/spring-boot
应用场景
Spring Boot 可以轻松创建可以“直接运行”的独立的、生产级的基于 Spring 的应用程序。并拥有如下特征: 1)创建独立的 Spring 应用程序. 2)直接嵌入 Tomcat、Jetty 或 Undertow(无需部署 WAR 文件)。 3)提供自以为是的“入门”依赖项以简化您的构建配置。 4)尽可能自动配置 Spring 和 第三方库。 5)提供生产就绪功能,例如指标、健康检查和外部化配置。 6)完全无需代码生成,无需 XML 配置。基础资源
jdk 1.8,springboot 2.5.10,junit5
使用须知
为什么要用Spring Boot? SpringBoot默认提供了大部分框架的使用方式,方便进行快速集成 , Spring Boot应用可以独立运行,符合微服务的开发理念, Spring Boot内置WEB容器,无需部署WAR包即可运行, Spring Boot提供了各种生产就绪型功能,如指标,健康检查和外部配置, Spring Boot通过网站提供了项目模板,方便项目的初始化, Spring Boot可以帮助我们非常简单、快速的构建起我们的项目,并能够非常方便进行后续开发、测试和部署。
配置步骤
A)基于SpringBoot创建并运行一个简单项目。
A1)前提准备。
安装Jdk,参考:Window上JDK(oracle,open jdk)的下载安装与Java环境变量的原理,配置及验证
安装Idea工具,参考:高效的java开发工具-JetBrains 旗下的IDEA的安装与配置
A2)基于spirngboot项目模板生成网站:start.spring.io,来初始化项目。
设置POM,初始化Maven的配置。
A3)添加示例Controller,初始化一个用于演示的测试API。
A4)打开:http://localhost:8080/test进行验证运行效果。
A5)增加一个mvc controller的单元测试,验证api是否能访问。
step1)在POM中增加junit5的包引用。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency>
step2)添加一个unit测试类。
package cn.net.config.ConfigLab.SpringBoot; import org.junit.jupiter.api.*; 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.web.servlet.MockMvc; import org.springframework.test.web.servlet.MvcResult; import org.springframework.test.web.servlet.RequestBuilder; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import org.springframework.test.web.servlet.result.MockMvcResultHandlers; import org.springframework.test.web.servlet.result.MockMvcResultMatchers; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.web.context.WebApplicationContext; import javax.annotation.Resource; /* *author: 配置啦 http://config.net.cn *createDate:2022-3-5 * */ //@RunWith(SpringRunner.class) //如果是junit4的话,就要加上@RunWith(SpringRunner.class) @SpringBootTest @AutoConfigureMockMvc public class DemoControllerTest { @Resource private MockMvc mockMvc; @Autowired private WebApplicationContext webApplicationContext; @Test void contextLoads(){ } @BeforeAll public static void beforeAll(){ //logger.info("beforeAll"); } @BeforeEach public void beforeEach(){ //logger.info("beforeEach");//mockMvc=MockMvcBuilders.standaloneSetup(newIndexController()).build(); mockMvc=MockMvcBuilders.webAppContextSetup(webApplicationContext).build(); } @AfterEach public void afterEach(){ //logger.info("afterEach"); } @AfterAll public static void afterAll(){ //logger.info("afterAll"); } @Test public void testHello() throws Exception { //mockMvc = MockMvcBuilders.standaloneSetup(new DemoControllerTest()).build(); RequestBuilder request=MockMvcRequestBuilders.get("/test") .param("rand","123") .accept(MediaType.APPLICATION_JSON) .contentType(MediaType.APPLICATION_JSON);//请求类型JSON MvcResult mvcResult=mockMvc.perform(request) .andExpect(MockMvcResultMatchers.status().isOk())//期望的结果状态200 .andDo(MockMvcResultHandlers.print())//添加ResultHandler结果处理器,比如调试时打印结果(print方法)到控制台 .andReturn();//返回验证成功后的MvcResult;用于自定义验证/下一步的异步处理; int status=mvcResult.getResponse().getStatus();//得到返回代码 String content=mvcResult.getResponse().getContentAsString();//得到返回结果 //logger.info("status:"+status+",content:"+content); } }
常见问题
-
spring-boot-maven-plugin not found 报红,找不到
【解决方案】添加版本:<version>2.5.10</version>, 版本号和parent节点下org.springframework.boot的版本保持一致 -
CONDITIONS EVALUATION REPORT,'org.springframework.test.web.servlet.MockMvc' available: expected at least 1 bean
【解决方案】需要增加一个注解@AutoConfigureMockMvc -
CONDITIONS EVALUATION REPORT,javax.sql.DataSource
【解决方案】由于mybatis没有设置mapper扫描: 解决方法:第一种可以在每个dao层的mapper接口上添加'@mapper'注解、第二种可以在springbbot启动类上添加@mapperscan(“包路径”)
快速入门
无