SpringBoot入门系列: Spring Boot的测试

简介: Spring Boot的测试,和普通项目的测试类同,可以继续使用我们熟悉的测试工具。当然,这里的测试,主要还是后台代码的测试。 主要需要注意的地方仅有三点: 1、依赖包的引入:pom.xml中仅依赖spring-boot-starter-test,它把相关的依赖全部引入。

Spring Boot的测试,和普通项目的测试类同,可以继续使用我们熟悉的测试工具。当然,这里的测试,主要还是后台代码的测试。


主要需要注意的地方仅有三点:

1、依赖包的引入:pom.xml中仅依赖spring-boot-starter-test,它把相关的依赖全部引入。

2、在测试类上的注解,常用的注解有三个

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration

这三个注解,只要注意第二个注解括号内的Application.class就行,把它替换为项目的启动类即可。

我们前面spring-boot-sample-mysql工程的启动类为SpringBootSampleMysqlApplication,那么测试类上的注解就是

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = SpringBootSampleMysqlApplication.class)
@WebAppConfiguration

3、测试类的文件结构,保持src/test/java和src/main/java结构一直,即:包+文件夹。

如:com.example包service中类的测试,那么在src/test/java也是建立com.example包,再在包下建立文件夹service.

注:由于我们测试的启动类用的是项目的启动类,所以Spring Boot项目的测试配置文件任然用src/main/resources的。

下面贴两个个测试类代码

1、服务类的

[java] view plain copy

 

在CODE上查看代码片派生到我的代码片

  1. package com.example.service;
  2. import java.util.List;
  3. import org.junit.Assert;
  4. import org.junit.Test;
  5. import org.junit.runner.RunWith;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.boot.test.SpringApplicationConfiguration;
  8. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
  9. import org.springframework.test.context.web.WebAppConfiguration;
  10. import com.example.Application;
  11. import com.example.domain.TestPOJO;
  12. import com.example.dto.HotelDto;
  13. @RunWith(SpringJUnit4ClassRunner.class)
  14. @SpringApplicationConfiguration(classes = Application.class)
  15. @WebAppConfiguration
  16. public class TestServicesTest {
  17.     @Autowired
  18.     TestServices testServices;
  19.     @Test
  20.     public void testShow() {
  21.         String expectedResult="hello world!";
  22.         String result=testServices.show();
  23.         Assert.assertTrue("数据一致", expectedResult.equals(result));
  24.         Assert.assertFalse("数据不一致", !expectedResult.equals(result));
  25.     }
  26.     @Test
  27.     public void testShowDao() {
  28.         List<TestPOJO> testPOJOList=testServices.showDao(10);
  29.         Assert.assertTrue("数据集不对", testPOJOList.size()==1);
  30.         Assert.assertTrue("数据一致", testPOJOList.get(0).getName().equals("nice"));
  31.     }
  32.     @Test
  33.     public void testFindByCountry() {
  34.         List<HotelDto> testPOJOList=testServices.findByCountry("US");
  35.         Assert.assertTrue("数据集不对", testPOJOList.size()==1);
  36.         Assert.assertTrue("数据一致", testPOJOList.get(0).getCityName().equals("San Francisco"));
  37.     }
  38. }

2、controller类的

[java] view plain copy

 

在CODE上查看代码片派生到我的代码片

  1. package com.example.controller;
  2. import java.util.List;
  3. import org.junit.Assert;
  4. import org.junit.Before;
  5. import org.junit.Test;
  6. import org.junit.runner.RunWith;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.boot.test.SpringApplicationConfiguration;
  9. import org.springframework.http.MediaType;
  10. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
  11. import org.springframework.test.context.web.WebAppConfiguration;
  12. import org.springframework.test.web.servlet.MockMvc;
  13. import org.springframework.test.web.servlet.MvcResult;
  14. import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
  15. import org.springframework.test.web.servlet.setup.MockMvcBuilders;
  16. import org.springframework.web.context.WebApplicationContext;
  17. import com.example.Application;
  18. import com.example.domain.TestPOJO;
  19. import com.example.dto.HotelDto;
  20. import com.example.service.TestServices;
  21. import com.fasterxml.jackson.core.JsonProcessingException;
  22. import com.fasterxml.jackson.databind.ObjectMapper;
  23. @RunWith(SpringJUnit4ClassRunner.class)
  24. @SpringApplicationConfiguration(classes = Application.class)
  25. @WebAppConfiguration
  26. public class TestControllerTest {
  27.     MockMvc mvc;
  28.     @Autowired
  29.     WebApplicationContext webApplicationConnect;
  30.     @Autowired
  31.     TestServices testServices;
  32.     String expectedJson;
  33.     @Before
  34.     public void setUp() throws JsonProcessingException {
  35.         mvc = MockMvcBuilders.webAppContextSetup(webApplicationConnect).build();
  36.     }
  37.     @Test
  38.     public void testShow() throws Exception {
  39.         String expectedResult = "hello world!";
  40.         String uri = "/show";
  41.         MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.get(uri).accept(MediaType.APPLICATION_JSON))
  42.                 .andReturn();
  43.         int status = mvcResult.getResponse().getStatus();
  44.         String content = mvcResult.getResponse().getContentAsString();
  45.         Assert.assertTrue("错误,正确的返回值为200", status == 200);
  46.         Assert.assertFalse("错误,正确的返回值为200", status != 200);
  47.         Assert.assertTrue("数据一致", expectedResult.equals(content));
  48.         Assert.assertFalse("数据不一致", !expectedResult.equals(content));
  49.     }
  50.     protected String Obj2Json(Object obj) throws JsonProcessingException {
  51.         ObjectMapper mapper=new ObjectMapper();
  52.         return mapper.writeValueAsString(obj);
  53.     }
  54.     @Test
  55.     public void testShowDaoInt() throws Exception {
  56.         List<TestPOJO> testPOJOList = testServices.showDao(10);
  57.         expectedJson = Obj2Json(testPOJOList);
  58.         String uri="/showDao?age=10";
  59.         MvcResult mvcResult=mvc.perform(MockMvcRequestBuilders.get(uri).accept(MediaType.APPLICATION_JSON)).andReturn();
  60.         int status=mvcResult.getResponse().getStatus();
  61.         String content=mvcResult.getResponse().getContentAsString();
  62.         Assert.assertTrue("错误,正确的返回值为200", status == 200);
  63.         Assert.assertFalse("错误,正确的返回值为200", status != 200);
  64.         Assert.assertTrue("数据一致", expectedJson.equals(content));
  65.         Assert.assertFalse("数据不一致", !expectedJson.equals(content));
  66.     }
  67.     @Test
  68.     public void testShowDaoString() throws Exception {
  69.         List<HotelDto> hotelDtoList=testServices.findByCountry("US");
  70.         expectedJson = Obj2Json(hotelDtoList);
  71.         String uri="/country/US";
  72.         MvcResult mvcResult=mvc.perform(MockMvcRequestBuilders.get(uri).accept(MediaType.APPLICATION_JSON)).andReturn();
  73.         int status=mvcResult.getResponse().getStatus();
  74.         String content=mvcResult.getResponse().getContentAsString();
  75.         Assert.assertTrue("错误,正确的返回值为200", status == 200);
  76.         Assert.assertFalse("错误,正确的返回值为200", status != 200);
  77.         Assert.assertTrue("数据一致", expectedJson.equals(content));
  78.         Assert.assertFalse("数据不一致", !expectedJson.equals(content));
  79.     }
  80. }

controller类的,为了MockMvc,注入了WebApplicationContext。


原文地址http://www.bieryun.com/833.html

相关文章
|
4月前
|
Java 测试技术 开发者
必学!Spring Boot 单元测试、Mock 与 TestContainer 的高效使用技巧
【10月更文挑战第18天】 在现代软件开发中,单元测试是保证代码质量的重要手段。Spring Boot提供了强大的测试支持,使得编写和运行测试变得更加简单和高效。本文将深入探讨Spring Boot的单元测试、Mock技术以及TestContainer的高效使用技巧,帮助开发者提升测试效率和代码质量。
507 2
|
30天前
|
XML Java 应用服务中间件
Spring Boot 两种部署到服务器的方式
本文介绍了Spring Boot项目的两种部署方式:jar包和war包。Jar包方式使用内置Tomcat,只需配置JDK 1.8及以上环境,通过`nohup java -jar`命令后台运行,并开放服务器端口即可访问。War包则需将项目打包后放入外部Tomcat的webapps目录,修改启动类继承`SpringBootServletInitializer`并调整pom.xml中的打包类型为war,最后启动Tomcat访问应用。两者各有优劣,jar包更简单便捷,而war包适合传统部署场景。需要注意的是,war包部署时,内置Tomcat的端口配置不会生效。
251 17
Spring Boot 两种部署到服务器的方式
|
24天前
|
监控 Java 应用服务中间件
SpringBoot是如何简化Spring开发的,以及SpringBoot的特性以及源码分析
Spring Boot 通过简化配置、自动配置和嵌入式服务器等特性,大大简化了 Spring 应用的开发过程。它通过提供一系列 `starter` 依赖和开箱即用的默认配置,使开发者能够更专注于业务逻辑而非繁琐的配置。Spring Boot 的自动配置机制和强大的 Actuator 功能进一步提升了开发效率和应用的可维护性。通过对其源码的分析,可以更深入地理解其内部工作机制,从而更好地利用其特性进行开发。
42 6
|
1月前
|
缓存 安全 Java
Spring Boot 3 集成 Spring Security + JWT
本文详细介绍了如何使用Spring Boot 3和Spring Security集成JWT,实现前后端分离的安全认证概述了从入门到引入数据库,再到使用JWT的完整流程。列举了项目中用到的关键依赖,如MyBatis-Plus、Hutool等。简要提及了系统配置表、部门表、字典表等表结构。使用Hutool-jwt工具类进行JWT校验。配置忽略路径、禁用CSRF、添加JWT校验过滤器等。实现登录接口,返回token等信息。
375 12
|
1月前
|
Java 测试技术 应用服务中间件
Spring Boot 如何测试打包部署
本文介绍了 Spring Boot 项目的开发、调试、打包及投产上线的全流程。主要内容包括: 1. **单元测试**:通过添加 `spring-boot-starter-test` 包,使用 `@RunWith(SpringRunner.class)` 和 `@SpringBootTest` 注解进行测试类开发。 2. **集成测试**:支持热部署,通过添加 `spring-boot-devtools` 实现代码修改后自动重启。 3. **投产上线**:提供两种部署方案,一是打包成 jar 包直接运行,二是打包成 war 包部署到 Tomcat 服务器。
47 10
|
1月前
|
存储 安全 Java
Spring Boot 3 集成Spring AOP实现系统日志记录
本文介绍了如何在Spring Boot 3中集成Spring AOP实现系统日志记录功能。通过定义`SysLog`注解和配置相应的AOP切面,可以在方法执行前后自动记录日志信息,包括操作的开始时间、结束时间、请求参数、返回结果、异常信息等,并将这些信息保存到数据库中。此外,还使用了`ThreadLocal`变量来存储每个线程独立的日志数据,确保线程安全。文中还展示了项目实战中的部分代码片段,以及基于Spring Boot 3 + Vue 3构建的快速开发框架的简介与内置功能列表。此框架结合了当前主流技术栈,提供了用户管理、权限控制、接口文档自动生成等多项实用特性。
85 8
|
2月前
|
缓存 前端开发 Java
【Spring】——SpringBoot项目创建
SpringBoot项目创建,SpringBootApplication启动类,target文件,web服务器,tomcat,访问服务器
|
3月前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
193 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
3月前
|
监控 Java 数据库连接
详解Spring Batch:在Spring Boot中实现高效批处理
详解Spring Batch:在Spring Boot中实现高效批处理
482 12
|
3月前
|
安全 Java 测试技术
详解Spring Profiles:在Spring Boot中实现环境配置管理
详解Spring Profiles:在Spring Boot中实现环境配置管理
164 10