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

相关文章
|
17天前
|
Java 测试技术 开发者
必学!Spring Boot 单元测试、Mock 与 TestContainer 的高效使用技巧
【10月更文挑战第18天】 在现代软件开发中,单元测试是保证代码质量的重要手段。Spring Boot提供了强大的测试支持,使得编写和运行测试变得更加简单和高效。本文将深入探讨Spring Boot的单元测试、Mock技术以及TestContainer的高效使用技巧,帮助开发者提升测试效率和代码质量。
100 2
|
20天前
|
测试技术 持续交付 开发者
探索自动化测试的无限可能:从入门到精通
在软件开发领域,确保产品质量是至关重要的。自动化测试作为一种高效、可靠的测试方法,正逐渐成为行业标准。本文将带你深入了解自动化测试的世界,从基础概念到实践技巧,帮助你掌握这一强大的工具。无论你是初学者还是有经验的开发者,都能从中获得宝贵的知识和启发。
|
21天前
|
Java 测试技术 开发者
初学者入门:掌握单元测试的基础与实践
【10月更文挑战第14天】单元测试是一种软件测试方法,它验证软件中的最小可测试单元——通常是单独的函数或类——是否按预期工作。单元测试的目标是确保每个模块在其自身范围内正确无误地运行。这些测试应该独立于其他模块,并且应该能够反复执行而不受外部环境的影响。
45 2
|
2天前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
19 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
3天前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
|
20天前
|
存储 人工智能 Java
将 Spring AI 与 LLM 结合使用以生成 Java 测试
AIDocumentLibraryChat 项目通过 GitHub URL 为指定的 Java 类生成测试代码,支持 granite-code 和 deepseek-coder-v2 模型。项目包括控制器、服务和配置,能处理源代码解析、依赖加载及测试代码生成,旨在评估 LLM 对开发测试的支持能力。
31 1
|
27天前
|
Java API Spring
springboot学习七:Spring Boot2.x 拦截器基础入门&实战项目场景实现
这篇文章是关于Spring Boot 2.x中拦截器的入门教程和实战项目场景实现的详细指南。
19 0
springboot学习七:Spring Boot2.x 拦截器基础入门&实战项目场景实现
|
27天前
|
Java API Spring
springboot学习六:Spring Boot2.x 过滤器基础入门&实战项目场景实现
这篇文章是关于Spring Boot 2.x中过滤器的基础知识和实战项目应用的教程。
21 0
springboot学习六:Spring Boot2.x 过滤器基础入门&实战项目场景实现
|
26天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,包括版本兼容性、安全性、性能调优等方面。
132 1